diff --git a/src/parser3.h b/src/parser3.h index 2902d3b..195892f 100644 --- a/src/parser3.h +++ b/src/parser3.h @@ -508,9 +508,18 @@ inline PRESERVE_NONE WeaselJsonStatus n_value(Parser3 *self, char *buf, self->dataBegin = buf; self->pop(); self->numDfa.reset(); - if (auto s = self->push({N_NUMBER})) { - return s; + buf = (char *)self->numDfa.scan(buf, bufEnd); + if (buf == bufEnd) { + self->flushNumber(false, buf); + if (auto s = self->push({N_NUMBER})) { + return s; + } + return WeaselJson_AGAIN; } + if (!self->numDfa.accept()) [[unlikely]] { + return WeaselJson_REJECT; + } + self->flushNumber(true, buf); MUSTTAIL return Parser3::keepGoing(self, buf, bufEnd); case 't': ++buf;