Skip to content

fix: land format parser strictness fixes - #10550

Merged
N0zoM1z0 merged 15 commits into
mainfrom
fix/format-parser-strictness
Nov 14, 2026
Merged

N0zoM1z0 merged 15 commits into
mainfrom
fix/format-parser-strictness

Conversation

@N0zoM1z0

@N0zoM1z0 N0zoM1z0 commented Nov 14, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

Eleven small format-parser strictness fixes, each a reviewed contributor PR whose fork CI never ran, cherry-picked with authorship kept. Merge with rebase to keep per-commit authorship.

Fixes #9700
Fixes #7312
Fixes #7315
Fixes #8407
Fixes #10262
Fixes #10211
Fixes #7689
Fixes #7433
Fixes #9942
Fixes #7400
Fixes #7445

Issue Change From
#9700 An ELF .dynsym null entry with only st_name set is accepted #9752
#7312 An empty innermost GGUF array counts against the frame limit #7698, neoLsH
#7315 Empty FDT strings at the reservation boundary are accepted, and empty DTB extents do not overlap #7317, ducanhnguyen223, plus a follow-up by morluto
#8407 XML plist preflight admits an empty DOCTYPE internal subset #8438, SahinurDEV
#10262 A pre-13.4 V8 module code cache is reported as a module #10263, rodricksz4h5
#10211 DNS RCODE, EDNS extended RCODE and OPCODE survive address attribution. Review follow-up: a message with more than one OPT record is a wire error (RFC 6891), so a later OPT cannot clear an earlier extended RCODE #10218, Alex Cinovoj
#7689 Unknown IPS row key names are retained, and historical row reports are accepted #7733, Avocado, plus a follow-up by morluto
#7433 APK classic ZIP disk declarations are validated #7471, wunianze666-netizen
#9942 Compiler metadata after an empty kernel builder is preserved #9950, hhang
#7400 PE TLS templates without complete file backing are retained instead of aborting load-config #7529, Rudy Celekli
#7445 Swift static witnesses admit the retroactive flag (only the mask change of #7489) #7489, Sarthak Pandey

Contribution scope: ordinary fixes within existing boundaries; maintainer scope decision not applicable.

  • Read existing files or captured data.

Evidence and regression coverage

Each contributor's regression test is kept (19 changed test files). After review, the null-symbol note is asserted by its facts rather than its sentence, and the repeated-OPT case has a test that fails without its fix. Parsers are exercised with synthetic fixtures, not real provider binaries.

Validation performed

  • npm run test:focused -- on the changed test files when the batch was prepared: 565 passed. The branch was rebased onto current main without conflicts.
  • npm run check:fast (pre-push): passed. oxfmt --check on the changed files: clean.

Compatibility, safety, and release

  • Breaking changes: none. Inputs that were refused or misreported are now accepted or reported exactly.

Author readiness

Human owner: N0zoM1z0 (PR author, exempt from the declaration per CONTRIBUTING.md).

Supersedes #9752, #7698, #7317, #8438, #10263, #10218, #7733, #7471, #9950, #7529 and #7489. After merge, also close #10176 (tracked by #9752).

cursoragent and others added 13 commits November 14, 2026 14:32
inspect-native-exports treated any nonzero byte in .dynsym entry 0 as a
malformed table. That is right when the reserved slot holds a real symbol,
which was #7389, but some Android arm64 libraries set only st_name. Those
files were rejected before any export could be read.

Skip that entry, keep the inventory complete, and record the nonzero
st_name in limitations. Any other nonzero field still fails the table.

Fixes #9700

Supersedes #9752

Co-Authored-By: gensokyo-dev <[email protected]>
The nesting guard ran on a child visit of GgufHeader#value, so an empty
innermost array never produced one and a 33rd frame parsed as success
while the reported limit stayed maximum_array_frames: 32. Charge the
frame when entering the ARRAY branch instead, so the bound counts the
advertised unit and no longer depends on a scalar child that is not a
frame.

Fixes #7312

Supersedes #7698

Co-Authored-By: gensokyo-dev <[email protected]>
…flight

An XML plist whose DOCTYPE ends in an empty internal subset ("[]",
optionally with whitespace) declares nothing that could expand, but the
preflight refused it as internal entity expansion. Interface Builder
bundles then omitted the nib and blamed aggregate decode budget
exhaustion. Skip whitespace-only subsets; any declaration still refuses.

Fixes #8407

Supersedes #8438

Co-Authored-By: gensokyo-dev <[email protected]>
… in address attribution

Fixes #10211

Supersedes #10218

Co-Authored-By: gensokyo-dev <[email protected]>
Fixes #7689
Supersedes #7733

Co-Authored-By: gensokyo-dev <[email protected]>
Squashed from #7471 and rebased onto main.

Fixes #7433
Supersedes #7471

Co-Authored-By: gensokyo-dev <[email protected]>
Squashed from #9950 and rebased onto main.

Fixes #9942
Supersedes #9950

Co-Authored-By: gensokyo-dev <[email protected]>
Signed-off-by: Rudy Celekli <[email protected]>

Fixes #7400
Supersedes #7529

Co-Authored-By: gensokyo-dev <[email protected]>
…tnesses

A retroactive protocol conformance sets flag bit 0x40. The static
witness check admitted only the type-reference kind bits (0x38), so a
retroactive conformance lost its static witness table. The admitted
mask is now 0x78; conditional requirements, resilient witnesses and
generic witness tables stay unadmitted.

Fixes #7445

Only the mask change and its tests are taken from #7489.

Supersedes #7489

Co-Authored-By: gensokyo-dev <[email protected]>
@chatgpt-codex-connector

Copy link
Copy Markdown
Codex Review Summary: ❌ Failed

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ❌ Failed 2026-11-14T14:33:02.061989Z
We couldn’t complete this review. Comment @codex review to try again.
925c0dc PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex usage limits have been reached for code reviews. Please check with the admins of this repo to increase the limits by adding credits.
Repo admins can enable using credits for code reviews in their settings.

@greptile-apps

greptile-apps Bot commented Nov 14, 2026 •

Copy link
Copy Markdown
Contributor

RetriggerView in GreptileConfidence Score: 5/5

[Medium impact] The PR appears safe to merge; both previous findings are addressed and no new actionable issues were found.

Summary

This PR adjusts eleven format parsers and adds regression coverage. The latest changes address both previous findings:

  • DNS addresses are attributed only for successful QUERY responses.
  • APK signing inspection checks classic ZIP disk declarations first.
  • Apple IPS reports show unknown keys on each thread, frame, and image.
  • ELF exports keep working when the null symbol has a name offset.
  • V8 code caches with the older module flag are reported as modules.
  • PE load-config reports retain TLS templates without full file backing.
  • Device-tree parsing accepts valid empty strings blocks.
  • GGUF metadata nesting counts empty arrays toward the frame limit.
  • XML plist preflight accepts an empty DOCTYPE internal subset.
  • Swift witness decoding accepts retroactive conformances.
  • Kernel build reports preserve compiler details when the builder is empty.

No new actionable issues or security issues were identified. Tests were inspected but not run. Supersession could not be checked because GitHub authentication was unavailable.

Reviews (2) · Last reviewed commit: "test(native): assert the null-symbol not..." · Reviewed by Greptile

Comment thread src/pcap/PcapDnsWire.ts Resolved
gensokyo-dev and others added 2 commits November 14, 2026 14:59
RFC 6891 makes a second OPT record a format error. Reading every OPT record
let a later one with extended RCODE 0 clear an earlier nonzero one, so an
error response could attribute its addresses.

Refs #10211

Co-Authored-By: gensokyo-dev <[email protected]>
Match the skipped entry's index, file offset and st_name instead of the whole
explanatory sentence.

Refs #9700

Co-Authored-By: gensokyo-dev <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment