Allow common process_escapes to handle \x sequences

This commit is contained in:
KerfuffleV2 2023-11-03 05:20:06 -06:00
parent 8f961abdc4
commit ee311f5ca7

View file

@ -90,6 +90,19 @@ void process_escapes(std::string& input) {
case '\'': input[output_idx++] = '\''; break; case '\'': input[output_idx++] = '\''; break;
case '\"': input[output_idx++] = '\"'; break; case '\"': input[output_idx++] = '\"'; break;
case '\\': input[output_idx++] = '\\'; break; case '\\': input[output_idx++] = '\\'; break;
case 'x':
// Handle \x12, etc
if (input_idx + 2 < input_len && input[input_idx + 1] != 0) {
const char x[3] = { input[input_idx + 1], input[input_idx + 2], 0 };
char *err_p = nullptr;
const long val = std::strtol(x, &err_p, 16);
if (*err_p == 0) {
input_idx += 2;
input[output_idx++] = char(val);
break;
}
// Intentionally fall through to default.
}
default: input[output_idx++] = '\\'; default: input[output_idx++] = '\\';
input[output_idx++] = input[input_idx]; break; input[output_idx++] = input[input_idx]; break;
} }