mirror of
https://github.com/LostRuins/koboldcpp.git
synced 2026-08-29 08:30:51 +02:00
common/peg : suppress incomplete escape sequences (#26780)
This commit is contained in:
@@ -77,6 +77,30 @@ void test_json_parser(testing &t) {
|
||||
t.assert_equal("result_is_need_more_input", true, result.need_more_input());
|
||||
});
|
||||
|
||||
// Test need_more_input() parsing - incomplete escape sequence in a string value
|
||||
t.test("need_more_input() parsing - incomplete escape sequence", [](testing &t) {
|
||||
auto json = build_peg_parser([](common_peg_parser_builder & p) { return p.json(); });
|
||||
|
||||
std::vector<std::string> inputs {
|
||||
R"({"text": "hello\)", // dangling backslash
|
||||
R"({"text": "hello\u)", // incomplete unicode escape sequence
|
||||
R"({"text": "hello\u00)",
|
||||
};
|
||||
|
||||
for (const auto & input : inputs) {
|
||||
t.test(input, [&](testing &t) {
|
||||
common_peg_parse_context ctx(input, COMMON_PEG_PARSE_FLAG_LENIENT);
|
||||
|
||||
auto result = json.parse(ctx);
|
||||
|
||||
t.assert_equal("result_is_need_more_input", true, result.need_more_input());
|
||||
|
||||
// the incomplete escape sequence is not part of the partial value
|
||||
t.assert_equal("result_end", input.find('\\'), result.end);
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
t.test("object member", [](testing &t) {
|
||||
auto parser = build_peg_parser([](common_peg_parser_builder & p) {
|
||||
return p.json_member("name", "\"" + p.chars("[a-z]") + "\"");
|
||||
|
||||
Reference in New Issue
Block a user