Skip to content

Reject ext32 length 0xffffffff in the C unpacker - #761

Open
methane wants to merge 1 commit into
msgpack:mainfrom
methane:fix-ext32-skip-overflow
Open

methane wants to merge 1 commit into
msgpack:mainfrom
methane:fix-ext32-skip-overflow

Conversation

@methane

@methane methane commented Oct 27, 2026

Copy link
Copy Markdown
Member

The trail length of an ext value includes the typecode byte, so an ext32 length of 0xffffffff wrapped to zero after + 1 in 32-bit arithmetic.

  • Unpacker.skip() treated the 5-byte ext32 header as a complete object and parsed the remaining bytes as the next object.
  • unpack() / unpackb() were already rejected by the max_ext_len check, but with a confusing 0 exceeds max_ext_len(...) message.

This PR raises ValueError before adding the typecode byte. The pure Python implementation is not affected.

Reported by Oz Kaiser (@tatikoma).

🤖 Generated with Claude Code

The trail length of an ext value includes the typecode byte, so
0xffffffff + 1 wrapped to zero in 32-bit arithmetic. Unpacker.skip()
then treated the 5-byte ext32 header as a complete object and parsed
the remaining bytes as the next object. unpack() was already rejected
by the max_ext_len check, but with a confusing "0 exceeds" message.

Raise ValueError before adding the typecode byte.

Reported by Oz Kaiser (@tatikoma).

Co-Authored-By: Claude Opus 5.5 <[email protected]>

This branch has not been deployed

No deployments
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.

1 participant