github ggml-org/llama.cpp b8571

latest releases: b8574, b8573
3 hours ago
Details

common/json-schema: fix: handle non-capturing groups (?:...) in JSON schema pattern converter (#21124)

The regex-to-grammar converter in _visit_pattern() crashes with SIGSEGV
when a JSON schema "pattern" field contains a non-capturing group (?:...).

Root cause: when the parser sees '(' followed by '?', it pushes a warning
but does not advance past '?:'. The recursive transform() call then
interprets '?' as a quantifier and calls seq.back() on an empty vector,
causing undefined behavior.

This commonly occurs when serving OpenAI-compatible tool calls from
clients that include complex regex patterns in their JSON schemas (e.g.,
date validation patterns like ^(?:(?:\d\d[2468][048]|...)-02-29|...)$).

The fix:

  • Skip '?:' after '(' to treat non-capturing groups as regular groups
  • For unsupported syntax (?=, ?!, etc.), skip to matching ')' safely,
    handling escaped characters to avoid miscounting parenthesis depth
  • Adjust the ')' unbalanced-parentheses check using direct char
    comparisons instead of substr
  • Add test cases for non-capturing groups (C++ only, as the JS/Python
    implementations do not yet support this syntax)

macOS/iOS:

Linux:

Windows:

openEuler:

Don't miss a new llama.cpp release

NewReleases is sending notifications on new releases.