Repository navigation
fix(runtime): make deep term operations stack-safe - #43
Merged
Merged
Conversation
mremond
force-pushed
the
fm/task-2cb3e3c7
branch
from
November 14, 2026 18:00
b405813 to
fc1c36c
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
Programs building deeply nested iolists should not crash when comparing, encoding, flattening or hashing their data.
What changed
Before and after
Before: All four operations crashed on a 200,000-level iolist; shallow hashes also differed from Erlang/OTP.
After: The same input produces matching ordering, 1,000,000 flattened bytes, 3,200,002 encoded bytes and hash 108113888 on native Nera and BEAM.
This changes runtime behavior, not a screen; native and BEAM program output directly demonstrates the result.
Checked
Live validation: Demonstrated for this version. 3 of 3 scenarios driven live in the product.
How it was checked
cargo build --release --locked -p nera-runtime, then cargo build --release --locked -p nera
cargo clippy --workspace --all-targets --locked -- -D warnings
cargo test --workspace --locked --no-fail-fast
python3 scripts/test-allocator-config.py
./target/release/nera test -j 1 --timeout 30
python3 scripts/test-stacktrace-order.py
scripts/test-cross.sh for x86_64-apple-darwin and aarch64-unknown-linux-gnu; object generation is not target-native execution.
The shared deep_term_ops fixture checks complete encoded and flattened bytes without recursively decoding the deep ETF term.
Independent code and proof reviews cleared the complete change and its retained exact-version validation.
Risk
Risk above low: Blast radius, medium — Shared runtime ordering, encoding, flattening and hashing paths change.; Undo, medium — Previously persisted native hashes may need recomputing.; Novelty, medium — Adds an iterative OTP-compatible portable hasher.
Full risk assessment
Not done
Fun hashes remain native-specific; deep ETF decoding and pathological nested map-key sorting remain outside this change.
Two external OneCached fixtures were skipped because their modules are unavailable.
Pipeline
Updates from git push no-mistakes
Infinitary checked this version: an independent review that also judged the documents, and live validation the review accepted.