FasterXML / FasterXML/jackson-core

Non-root number separator validation not applied to non-blocking (async) parser (follow-up to #1557)

Open
#1,640 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
Java
Stars
2.4k
Forks
928
Avg merge
2d 18h
Merged PRs (30d)
24

Description

Follow-up to #1557 / #1615, as discussed in https://github.com/FasterXML/jackson-core/pull/1615#issuecomment (with @cowtowncoder agreeing async warrants a separate change).

### Background

#1615 generalized the root-only `_verifyRootSpace` into `_verifyNumberSeparator` and now eagerly validates the separator after **non-root** number values, but only in the three **blocking** parsers (`ReaderBasedJsonParser`, `UTF8StreamJsonParser`, `UTF8DataInputJsonParser`).

The **non-blocking / async** parser path (`NonBlockingJsonParserBase` and its subclasses `NonBlockingJsonParser` / `NonBlockingByteArrayJsonParser`) was intentionally left out of that PR and still fails **lazily** — the malformed content is only detected when the next token is read, one token too late.

### Repro

The same inputs from #1557 that are now caught eagerly by the blocking parsers still slip through on the async path:

```
[ 123true ] // -> reports number token 123, fails only on next token
[ 100k ] // -> 100
[ 100/ ] // -> 100
[ 1.5x ] // -> 1.5
[ 1.5false ] // -> 1.5
```

### Scope

Apply the equivalent trailing-separator check at the number-completion sites in the non-blocking parser so async parsing reports the error at the offending character, matching the blocking parsers' behavior and location. Async introduces `NEED_MORE_INPUT` boundaries at end-of-chunk, so the check has to tolerate a not-yet-available trailing byte (defer the decision to the next feed rather than reject), which is why this is a separate change from #1615.

Happy to pick this up.

Contributor guide

No contributing guide indexed for this repository

Research direction

Start in NonBlockingJsonParserBase and compare its number-completion sites with the equivalent checks in ReaderBasedJsonParser, UTF8StreamJsonParser, and UTF8DataInputJsonParser. Exercise the listed malformed inputs across chunk boundaries, and consider the work done when async parsing reports the error at the offending character while deferring decisions at NEED_MORE_INPUT boundaries.

Written by the indexing model from the issue text.

Assessment

Tech stack
java
Domain
backend
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Quiet
Clarity
Clearly specified
Newbie friendliness
68/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.