Fix string scan bug

This commit is contained in:
2025-06-22 23:01:08 -04:00
parent 95250d1668
commit fc1b3ac147

View File

@@ -788,18 +788,20 @@ inline PRESERVE_NONE WeaselJsonStatus scan_string_impl(Parser3 *self,
char *bufEnd) {
const auto before = buf;
// Advance buf past normal characters
for (;;) {
if (bufEnd - buf < V::lanes) [[unlikely]] {
break;
}
auto v = V{(int8_t *)buf};
int normal =
(v != V::splat('"') & v != V::splat('\\') & v >= V::splat(0x20))
.count_leading_nonzero_lanes();
buf += normal;
if (normal < V::lanes) {
break;
// Advance buf past characters that transition the accept state to itself
if (self->strDfa.accept()) {
for (;;) {
if (bufEnd - buf < V::lanes) [[unlikely]] {
break;
}
auto v = V{(int8_t *)buf};
int normal =
(v != V::splat('"') & v != V::splat('\\') & v >= V::splat(0x20))
.count_leading_nonzero_lanes();
buf += normal;
if (normal < V::lanes) {
break;
}
}
}