Can you step through this in a debugger and see what character is seen
in next_char at the end of this snippet, and what value is in `c' at
that point, when it fails?  The function read_escape called by this
fragment could also be of interest.

Something seems to be messed up in the read_escape function :
it should read the string "[?\\C-0]" 
it reads the 'C' and the '-', then it returns the char '0' + ctrl_modifier,
and back in read1, the next char read is '0' again.
Which means that in read1 at the failure point, 
next_char = 0x00000030
and c = 0x04000030

I tried to step inside read_escape, but not sure what's going wrong here.

Greetings,

--
Fabrice