Tighten string length bounds and propagate invalid jv in implode
The bound added in CVE-2026-32316 (e47e56d22) still allowed
`sizeof(jvp_string) + (currlen + len) * 2 + 1` to wrap `size_t` on
32-bit platforms. Tighten the threshold so the final allocation
fits in 32-bit `size_t`.
Also break out of `jv_string_implode` and `f_string_implode` once
`jv_string_append_codepoint` returns an invalid `jv`; otherwise the
next iteration triggers the assertion in `jvp_string_ptr` (or
invokes undefined behavior under `-DNDEBUG`).
Fixes CVE-2026-54679.
Co-authored-by: Dirk Müller <dirk@dmllr.de>
This commit is contained in:
1 parent
e987df0d46
commit
46d1da3094
2 files changed
+4
-2
No files matched your search
@@ -1434,6 +1434,7 @@ static jv f_string_implode(jq_state *jq, jv a) {
|
||||
if (nv < 0 || nv > 0x10FFFF || (nv >= 0xD800 && nv <= 0xDFFF))
|
||||
nv = 0xFFFD; // U+FFFD REPLACEMENT CHARACTER
|
||||
s = jv_string_append_codepoint(s, nv);
|
||||
if (!jv_is_valid(s)) break;
|
||||
}
|
||||
|
||||
jv_free(a);
|
||||
|
||||
Reference in new issue
Block a user