Skip to content

src/MediaInfoLib/Source/MediaInfo/Video/File_Vc1.cpp:293 Invalid Array Index Leading to SEGV in MediaInfoLib::File_Vc1::Streams_Fill #2611

@sigdevel

Description

@sigdevel

src/MediaInfoLib/Source/MediaInfo/Video/File_Vc1.cpp:293 Invalid Array Index Leading to SEGV in MediaInfoLib::File_Vc1::Streams_Fill

Description:

When processing a crafted VC-1 sample, MediaInfo crashes in MediaInfoLib::File_Vc1::Streams_Fill() at src/MediaInfoLib/Source/MediaInfo/Video/File_Vc1.cpp:293.

Streams_Fill() uses the bitstream-controlled fields AspectRatio, profile, and colordiff_format as raw indices into three separate fixed-size const-pointer tables without validating any of them. The fatal access is at line 293:

Fill(Stream_Video, 0, Video_ChromaSubsampling, Vc1_ChromaSubsamplingFormat[colordiff_format]);

Vc1_ChromaSubsamplingFormat has four entries. A crafted VC-1 bitstream sets colordiff_format (along with AspectRatio and profile) to 190, which UBSAN flags in sequence at lines 279 (Vc1_PixelAspectRatio[AspectRatio]), 287 (Vc1_Profile[profile]), and 293. The garbage const char* read from Vc1_ChromaSubsamplingFormat[190] is a near-zero address; when it reaches strlen() inside Ztring::From_UTF8(), the process faults.

Output:

asan-build:

show relevant excerpt - click to expand
/run/media/user/81c71df6-ca99-4d27-a7b6-55107e347080/mediainfo/src/MediaInfoLib/Source/MediaInfo/Video/File_Vc1.cpp:279:26: runtime error: index 190 out of bounds for type 'const float32[16]' (aka 'const float[16]')
SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior /run/media/user/81c71df6-ca99-4d27-a7b6-55107e347080/mediainfo/src/MediaInfoLib/Source/MediaInfo/Video/File_Vc1.cpp:279:26 
/run/media/user/81c71df6-ca99-4d27-a7b6-55107e347080/mediainfo/src/MediaInfoLib/Source/MediaInfo/Video/File_Vc1.cpp:287:17: runtime error: index 190 out of bounds for type 'const char *[4]'
SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior /run/media/user/81c71df6-ca99-4d27-a7b6-55107e347080/mediainfo/src/MediaInfoLib/Source/MediaInfo/Video/File_Vc1.cpp:287:17 
/run/media/user/81c71df6-ca99-4d27-a7b6-55107e347080/mediainfo/src/MediaInfoLib/Source/MediaInfo/Video/File_Vc1.cpp:293:52: runtime error: index 190 out of bounds for type 'const char *[4]'
SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior /run/media/user/81c71df6-ca99-4d27-a7b6-55107e347080/mediainfo/src/MediaInfoLib/Source/MediaInfo/Video/File_Vc1.cpp:293:52 
AddressSanitizer:DEADLYSIGNAL
=================================================================
==900278==ERROR: AddressSanitizer: SEGV on unknown address 0x000000000003 (pc 0x7f281b17d0d9 bp 0x7ffe26eeee20 sp 0x7ffe26eee5d8 T0)
==900278==The signal is caused by a READ memory access.                                                                                                     
==900278==Hint: address points to the zero page.
    #0 0x7f281b17d0d9 in __strlen_avx2_rtm string/../sysdeps/x86_64/multiarch/strlen-avx2.S:76
    #1 0x55b49e994547 in strlen (/run/media/user/81c71df6-ca99-4d27-a7b6-55107e347080/mediainfo/runtime/fuzz_harness/fuzz_mediainfo_asan+0x232b547) (BuildId: bea5f1543242f0d0639eacc3bc8ac2978314c4a4)
    #2 0x55b4a17ddcf0 in ZenLib::Ztring::From_UTF8(char const*, unsigned long, unsigned long) /run/media/user/81c71df6-ca99-4d27-a7b6-55107e347080/mediainfo/src/ZenLib/Source/ZenLib/Ztring.cpp:408:16
    #3 0x55b49ebf29d8 in ZenLib::Ztring::From_UTF8(char const*, unsigned long) /run/media/user/81c71df6-ca99-4d27-a7b6-55107e347080/mediainfo/src/MediaInfoLib/Project/CMake/../../../ZenLib/Source/ZenLib/Ztring.h:91:89
    #4 0x55b49ebf1b48 in MediaInfoLib::File__Analyze::Fill(MediaInfoLib::stream_t, unsigned long, unsigned long, char const*, unsigned long, bool, bool) /run/media/user/81c71df6-ca99-4d27-a7b6-55107e347080/mediainfo/src/MediaInfoLib/Project/CMake/../../Source/MediaInfo/File__Analyze.h:1162:226
    #5 0x55b4a0eb8763 in MediaInfoLib::File_Vc1::Streams_Fill() /run/media/user/81c71df6-ca99-4d27-a7b6-55107e347080/mediainfo/src/MediaInfoLib/Source/MediaInfo/Video/File_Vc1.cpp:293:5
    #6 0x55b4a103c451 in MediaInfoLib::File__Analyze::Fill(char const*) /run/media/user/81c71df6-ca99-4d27-a7b6-55107e347080/mediainfo/src/MediaInfoLib/Source/MediaInfo/File__Analyze.cpp:3569:5
    #7 0x55b4a107ceae in MediaInfoLib::File__Analyze::Fill(MediaInfoLib::File__Analyze*) /run/media/user/81c71df6-ca99-4d27-a7b6-55107e347080/mediainfo/src/MediaInfoLib/Source/MediaInfo/File__Analyze.cpp:3586:13
    #8 0x55b49fc55730 in MediaInfoLib::File_Mpeg4::Streams_Finish() /run/media/user/81c71df6-ca99-4d27-a7b6-55107e347080/mediainfo/src/MediaInfoLib/Source/MediaInfo/Multiple/File_Mpeg4.cpp:983:17
    #9 0x55b4a1025080 in MediaInfoLib::File__Analyze::ForceFinish(char const*) /run/media/user/81c71df6-ca99-4d27-a7b6-55107e347080/mediainfo/src/MediaInfoLib/Source/MediaInfo/File__Analyze.cpp:3672:9
    #10 0x55b4a1039c37 in MediaInfoLib::File__Analyze::Open_Buffer_Finalize(bool) /run/media/user/81c71df6-ca99-4d27-a7b6-55107e347080/mediainfo/src/MediaInfoLib/Source/MediaInfo/File__Analyze.cpp:1732:9
    #11 0x55b4a129dc75 in MediaInfoLib::File__MultipleParsing::Read_Buffer_Continue() /run/media/user/81c71df6-ca99-4d27-a7b6-55107e347080/mediainfo/src/MediaInfoLib/Source/MediaInfo/File__MultipleParsing.cpp:952:26
    #12 0x55b4a101dd6c in MediaInfoLib::File__Analyze::Open_Buffer_Continue_Loop() /run/media/user/81c71df6-ca99-4d27-a7b6-55107e347080/mediainfo/src/MediaInfoLib/Source/MediaInfo/File__Analyze.cpp:1501:5
    #13 0x55b4a101110b in MediaInfoLib::File__Analyze::Open_Buffer_Continue(unsigned char const*, unsigned long) /run/media/user/81c71df6-ca99-4d27-a7b6-55107e347080/mediainfo/src/MediaInfoLib/Source/MediaInfo/File__Analyze.cpp:1114:16
    #14 0x55b49ebba057 in MediaInfoLib::MediaInfo_Internal::Open_Buffer_Continue(unsigned char const*, unsigned long) /run/media/user/81c71df6-ca99-4d27-a7b6-55107e347080/mediainfo/src/MediaInfoLib/Source/MediaInfo/MediaInfo_Internal.cpp:1723:11
    #15 0x55b49ea60ebb in MediaInfoLib::MediaInfo::Open_Buffer_Continue(unsigned char const*, unsigned long) /run/media/user/81c71df6-ca99-4d27-a7b6-55107e347080/mediainfo/src/MediaInfoLib/Source/MediaInfo/MediaInfo.cpp:110:22
    #16 0x55b49ea6012f in run_one(MediaInfoLib::MediaInfo&, unsigned char const*, unsigned long) /run/media/user/81c71df6-ca99-4d27-a7b6-55107e347080/mediainfo/runtime/fuzz_harness/fuzz_mediainfo.cpp:53:28
    #17 0x55b49ea6012f in main /run/media/user/81c71df6-ca99-4d27-a7b6-55107e347080/mediainfo/runtime/fuzz_harness/fuzz_mediainfo.cpp:101:5
    #18 0x7f281b033f74 in __libc_start_call_main csu/../sysdeps/nptl/libc_start_call_main.h:58:16
    #19 0x7f281b034026 in __libc_start_main csu/../csu/libc-start.c:360:3
    #20 0x55b49e97c830 in _start (/run/media/user/81c71df6-ca99-4d27-a7b6-55107e347080/mediainfo/runtime/fuzz_harness/fuzz_mediainfo_asan+0x2313830) (BuildId: bea5f1543242f0d0639eacc3bc8ac2978314c4a4)

==900278==Register values:
rax = 0x0000000000000003  rbx = 0x0000000026eeef01  rcx = 0x0000000000000001  rdx = 0x0000000000000003  
rdi = 0x0000000000000003  rsi = 0x0000000000000003  rbp = 0x00007ffe26eeee20  rsp = 0x00007ffe26eee5d8  
 r8 = 0x0000000000000000   r9 = 0x00007fffffffff01  r10 = 0x000051d000026201  r11 = 0x0000000000000246  
r12 = 0x000051b000000080  r13 = 0x0000000000000600  r14 = 0x0000000000000003  r15 = 0x000051b000000080  
AddressSanitizer can not provide additional info.
SUMMARY: AddressSanitizer: SEGV string/../sysdeps/x86_64/multiarch/strlen-avx2.S:76 in __strlen_avx2_rtm
==900278==ABORTING

Environment

OS: Linux rack1 6.19.14+kali-amd64 #1 SMP PREEMPT_DYNAMIC Kali 6.19.14-1+kali1 (2026-05-05) x86_64 GNU/Linux ;
Compiler version: Debian clang version 21.1.8 (3+b1) ;
Build-opts: -fsanitize=address,undefined -g ;
CPU type: x86_64 ;
MediaInfo - commit hash c1b98df276b93c95849380248e82acb8554def26 ;
MediaInfo version - 26.01 ;

Additional context

sample:

mediainfo_8

Screenshot

screen

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions