]> git.djapps.eu Git - pkg/ggml/sources/llama.cpp/commitdiff
Allow common process_escapes to handle \x sequences (#3928)
authorKerfuffle <redacted>
Sun, 5 Nov 2023 17:06:06 +0000 (10:06 -0700)
committerGitHub <redacted>
Sun, 5 Nov 2023 17:06:06 +0000 (10:06 -0700)
* Allow common process_escapes to handle \x sequences

* Fix edge case when second hex digit is NUL

common/common.cpp

index 20cc4a081b22253e4dd3ecfe126d0eb3c9213007..37e3ace8ac5d9291bccd13b43d25cbb6189188fc 100644 (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 'x':
+                    // Handle \x12, etc
+                    if (input_idx + 2 < input_len) {
+                        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 == x + 2) {
+                            input_idx += 2;
+                            input[output_idx++] = char(val);
+                            break;
+                        }
+                        // Intentionally fall through to default.
+                    }
                 default:   input[output_idx++] = '\\';
                            input[output_idx++] = input[input_idx]; break;
             }