Skip to content

Release candidate 4.6.7 - #2824

Open
lemire wants to merge 4 commits into
4.6.xfrom
release/4.6.7-rc
Open

Release candidate 4.6.7#2824
lemire wants to merge 4 commits into
4.6.xfrom
release/4.6.7-rc

Conversation

@lemire

@lemire lemire commented Aug 14, 2026

Copy link
Copy Markdown
Member

Release candidate for the 4.6.7 patch release, branched from v4.6.6. Opened so that CI runs before the release is tagged.

Contents

Commit What
2acb85a2 ci: sync workflows with master
9f2952b3 Reject malformed big integers with trailing non-structural characters (cherry-pick of #2820)
57f4522c version bump (4.6.7)
cdeb069a Fix failing just_ascii test (cherry-pick of #2661)

1. CI modernization

.github/ is byte-for-byte identical to master, with one deliberate exception. Refreshed action versions, the VS 2022 (vs17-*) jobs replaced by VS 2026 (vs18-*), and the new freebsd, gcc16 and ubuntu24-clang20 workflows.

The exception is gcc16.yml: its autodetection job was dropped because it compiles tests/reflection_autodetect_tests.cpp and sets SIMDJSON_STATIC_REFLECTION_MODE, neither of which exists on 4.6.x — static reflection is a master-only feature. The build job is kept, so gcc 16 still builds and runs the full suite.

Two other master-only options survive as inert -D flags (SIMDJSON_ENABLE_NAN_INF in macos.yml, SIMDJSON_ENABLE_MEMORY_FILE_MAPPING_ON_WINDOWS in vs18-ci.yml). CMake only warns about unused variables, so those jobs pass; they simply do not exercise features this branch does not have.

2. The bug fix (#2820)

Straight cherry-pick. The only conflict was cosmetic: master renamed the visit_number parameter value to num, so the hunk was reapplied against value. The fix itself is unchanged:

// The digit run must be terminated by a structural or whitespace character; otherwise the
// token is malformed (e.g. "123456789123456789123x").
if (jsoncharutils::is_not_structural_or_whitespace(*p)) { return NUMBER_ERROR; }

As on master, visit_root_number delegates to visit_number, so the root-level case is covered by the same check. The accompanying rejects_trailing_garbage regression test applied cleanly.

3. Version bump

include/simdjson/simdjson_version.h, CMakeLists.txt and Doxyfile moved to 4.6.7. Being a patch release, SIMDJSON_LIB_SOVERSION stays at 33. The amalgamation was regenerated with singleheader/amalgamate.py, refreshing simdjson.h, simdjson.cpp and singleheader.zip.

4. just_ascii

This test was already red at v4.6.6tests/fractured_json_tests.cpp, tests/dom/big_integer_tests.cpp and tests/builder/static_reflection_edge_cases_tests.cpp contain non-ASCII characters. Master fixed it in #2661, which never reached 4.6.x, so that commit is cherry-picked here to keep the RC's CI signal clean. It touches only tests, benchmark/partial_tweets/tweet.h and the CMake test definition — no include/ or src/ changes, so the shipped library and the amalgamation are unaffected.

Verification

Configured with -DSIMDJSON_DEVELOPER_MODE=ON on macOS/arm64: 109/109 tests pass. The regenerated single header compiles and runs the amalgamation demo against twitter.json and amazon_cellphones.ndjson.

Note on CI coverage

31 workflows run on this branch. The 13 cross-architecture ones — aarch64, ppc64, s390x, riscv64, the five rvv-*, freebsd, gcc16, fuzzers and ubuntu24-checkperf — are gated on branches: [master] and therefore do not run here. If that coverage is wanted before tagging, their push: branch filters need to name this branch temporarily.

lemire and others added 4 commits August 14, 2026 12:13
Brings the 4.6.x branch's GitHub Actions up to date with master: refreshed
action versions, the VS 2022 (vs17) jobs replaced by VS 2026 (vs18), and the
new freebsd, gcc16 and ubuntu24-clang20 workflows.

The gcc16 autodetection job is omitted: it exercises the static reflection
support that only exists on master.
…#2820)

When number_as_string is enabled, visit_number copied a big integer's
digit run to the string buffer without checking the character that
follows, so malformed tokens like "123456789123456789123x" were
silently accepted. parse_number applies this check to numbers that fit
in 64 bits, but the big-integer path returns before reaching it.

Add the same is_not_structural_or_whitespace check, plus a regression
test covering object, negative and root-level trailing garbage.

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
(cherry picked from commit 07b3254)
* fix just_ascii errors in test/benchmark sources

* make just_ascii test run in CI

(cherry picked from commit 8955c2c)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants