C string hexadecimal-escaped characters may have more than 2 digits.
This results in a wrong C compiler interpretation of a 2-digit escaped
character when followed by an hex digit character.
The solution retained here is to represent such characters as 3-digit
octal escapes.
Adjust and extend test 1465 for this case.
Closes #9643
strcpy(e, "\\?");
e += 2;
}
- else if(!ISPRINT(c)) {
+ else if(ISPRINT(c))
+ *e++ = c;
+ else if(len > 1 && ISXDIGIT(s[1])) {
+ /* Octal escape to avoid >2 digit hex. */
+ msnprintf(e, 5, "\\%03o", (unsigned)c);
+ e += 4;
+ }
+ else {
msnprintf(e, 5, "\\x%02x", (unsigned)c);
e += 4;
}
- else
- *e++ = c;
}
while(cutoff--)
*e++ = '.';