You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
fix(ipv6): from_data(info.to_dict()) crashes when an IPv6_Ext stands in for a dedicated extension header #1473
Bug. Rebuilding from to_dict() crashes when an IPv6 extension header was parsed by the generic IPv6_Ext fallback, which happens for example when the header is cut short. The dict path rebuilds the entry with the dedicated class (HOPOPT), which then misses the fields only it would have parsed.
Repro on main (94ae9664c):
hop=bytes([59,1]) +bytes([1,12]) +bytes(12) # HOPOPT, 16 octets declaredraw=bytes([0x60,0,0,0]) +struct.pack('!HBB', 16, 0, 64) +b'\x00'*32+hop[:10]
p=IPv6(raw, len(raw)) # _exthdr holds an IPv6_ExtIPv6.from_data(p.info.to_dict()) # AttributeError: 'HOPOPT' object has no attribute 'options'
Cuts at 8, 10, 12 and 15 octets all fail the same way. The object form is unaffected.
The cause is in ipv6.py's dict path, around _lookup_exthdr, which #1466 changes. Found by the #1465 worker (107 cut cases).
Unblocked: #1466 merged (8328fd3bb). #1471 and #1473 both touch pcapkit/protocols/internet/ipv6.py, so one worker is taking both, rebased on current main.
Activity
JarryShaw commentedon Oct 9, 2026
Blocked until #1466 merges. #1466 changes
_lookup_exthdrinipv6.py, where this fix goes. #1471 is in the same file and waits on the same condition.JarryShaw commentedon Oct 9, 2026
Unblocked: #1466 merged (
8328fd3bb). #1471 and #1473 both touchpcapkit/protocols/internet/ipv6.py, so one worker is taking both, rebased on currentmain.fix(ipv6): rebuild a cut extension header chain byte-exact (#1471, #1473
fix(ipv6)!: rebuild a cut extension header chain byte-exact (#1471, #…
fix(protocols): hold the IPv6 extension headers in extension_headers (#…
fix(protocols): rebuild the IPv6 chain from __exthdr__ alone (#2003)
fix(protocols): keep __exthdr__ as a tuple of parser and info pairs (#…
fix(protocols): find the payload by protocol name and follow IPv6 nex…