Repository navigation
fix(internet): rebuild an IGMPv3 message cut short and parsed on its own (#2660) - #2672
Merged
Merged
Conversation
…own (#2660) IGMPv3(raw, len(raw)) on a cut Query or Report rebuilt at full width through from_data(info). IGMP has no length field, so IGMPv3.body takes the whole remaining length and its own read is never short; Schema.unpack records the short read on the Query, QueryExtension, Report or GroupRecord within it, which keep_short_read does not look into. Parsing through IPv4 was unaffected. - _keep_body_short_read, called from IGMPv3.read, records the body as cut after the octets it holds when a schema within it read short: the record an enclosing IPv4 length already gives, which replay_short_read cuts back. - Kept local: a record nested in another header need not mean the data ended, and hoisting one in keep_short_read changes MH and TCP rebuilds. - Tests: every cut of a Query and a Report through the direct constructor, whole messages as controls, the record matching IPv4's, and direct cases in the short-read sweep. - A bool num_group_records with one record pins #2650's existing refusal, ruled on #2617; nothing in this change alters that check. IGMP, schema, sweep and doc-claim modules pass; captures parse identically.
Owner
Author
|
GOOD TO GO at |
5 tasks done
JarryShaw
added a commit
that referenced
this pull request
Nov 2, 2026
…he cut-frame fixes and GRE's bindings into 1.6.0 (#2449) - Breaking: TCP, UDP and SCTP makers (#2670) and PCAP-NG's (#2671) raise on a value a field cannot hold, where 1.5.x wrote it masked; each entry gives the old and new values. The TTL Diff wraps as before. - Changed: __index__ returns the LinkType, EtherType, TransType or AppType value, ports as ints (#2652); only Create Release waits for a deployment approval (#2658). The conventions entry records the index rule. - Fixed: a cut HTTP/2 SETTINGS frame parses and rebuilds; HTTPv2.make takes frame_length (#2666). - Folded into unreleased entries: FRAD at LinkType 107 and GRE at IP protocol 47 (#2667); cut IGMPv3 messages and num_group_records (#2662, #2672); Linux_ARPHRD (#2663); DCCP's range checks (#2670); a cut GRE frame is TRUNCATED, replacing fold-12's INVALID note, and frame_length in pcapkit.utilities.contextvars (#2668). - No entry for _make_sint's private allow_unsigned, ARP's private PAT_MAC_ADDR, or the test- and docs-only d728873, 326a6cf, fc80fb1, a37edf1 and 2766707. - CHANGELOG.md regenerated; util/changelog_md.py --check passes.
1 of 5 tasks
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.
make pylint,make mypy,make isort)make testpasses, and a test case covers the changeWhat is the purpose of your pull request?
fix— fixes a bugDescription of your pull request and other information
A cut IGMPv3 message parsed directly with
IGMPv3(raw, len(raw))rebuilds as captured. It already did when the message was carried by IPv4.bodyread is never short. The short read was recorded only on the nestedQuery,ReportorGroupRecord, wherekeep_short_readnever looked._keep_body_short_read, called fromIGMPv3.read, records the body's short read on the header. That is the same record the IPv4 path produces. It stays local because the same lift in the sharedkeep_short_readwould mark complete MPTCP DSS segments as cut.num_group_recordscheck:Truewith one record is now refused.A Sonnet cross-review returned GOOD TO GO on behaviour. None of 468 complete controls is marked short, every changed rebuild goes from wrong to exact, and IPv4-carried cuts are unchanged. Its cleanup requests are in this head.
Closes #2660