Skip to content

demux/ebml: Allow uint elements to have length 0 - #18351

Closed
not43s wants to merge 1 commit into
mpv-player:masterfrom
not43s:allow-zero-length-ebml-uints
Closed

not43s wants to merge 1 commit into
mpv-player:masterfrom
not43s:allow-zero-length-ebml-uints

Conversation

@not43s

@not43s not43s commented Aug 8, 2026

Copy link
Copy Markdown

Section 7.2 of the current ebml spec (rfc 8794) states that uint elements with length 0 are permitted.

There was a previous commit ef020c1 about 11 years ago that addressed this issue for several elements. The uint element was among these; functions like ebml_read_uint were changed, but it seems this particular section may have been overlooked.

Prior to this change, mkv files with 0-length uint elements were not playable by mpv. These same files were otherwise playable or parsable without issues by other applications like ffplay, vlc, mkvinfo, etc.

Thanks.

Section 7.2 of the current ebml spec (rfc 8794) states that uint elements with
length 0 are permitted.

There was a previous commit ef020c1 about 11 years ago that addressed this
issue for several elements. The uint element was among these; functions like
ebml_read_uint were changed, but it seems this particular section may have been
overlooked.

Prior to this change, mkv files with 0-length uint elements were not playable
by mpv. These same files were otherwise playable or parsable without issues by
other applications like ffplay, vlc, mkvinfo, etc.
@not43s
not43s force-pushed the allow-zero-length-ebml-uints branch from bdf6272 to da19749 Compare August 8, 2026 04:33
@not43s not43s changed the title demux/ebml.c: Allow uint elements to have length 0 demux/ebml: Allow uint elements to have length 0 Aug 13, 2026
@kasper93

Copy link
Copy Markdown
Member

When size is 0, the value has to be initialized to 0 or default value for this element, if available. Hence this implementation is not complete.

@not43s

not43s commented Aug 14, 2026

Copy link
Copy Markdown
Author

This was only a minimal change to make uint consistent with the behavior of the other numeric types.

As far as I can tell, the current implementation in ebml.c is not handling default values for any of the numeric types.

@kasper93

Copy link
Copy Markdown
Member

This was only a minimal change to make uint consistent with the behavior of the other numeric types.

As far as I can tell, the current implementation in ebml.c is not handling default values for any of the numeric types.

I think we should make it work, instead of silently producing wrong playback. I've implemented default values here #18367

kasper93 added a commit to kasper93/mpv that referenced this pull request Aug 14, 2026
An EBML element is permitted to have a zero-length data payload. It's
then interpreted as the element's RFC declared default value, or zero.

Before this change all zero-length elements were initialized to empty or
rejected in case of uint.

Fixes: mpv-player#18351
@not43s

not43s commented Aug 14, 2026

Copy link
Copy Markdown
Author

Very cool. Thanks.

@not43s not43s closed this Aug 14, 2026
kasper93 added a commit that referenced this pull request Aug 14, 2026
An EBML element is permitted to have a zero-length data payload. It's
then interpreted as the element's RFC declared default value, or zero.

Before this change all zero-length elements were initialized to empty or
rejected in case of uint.

Fixes: #18351
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.

2 participants