]> git.sesse.net Git - vlc/commitdiff
Prevent a potential integer overflow (mkv).
authorLaurent Aimar <fenrir@videolan.org>
Sun, 28 Feb 2010 11:48:10 +0000 (12:48 +0100)
committerLaurent Aimar <fenrir@videolan.org>
Sun, 28 Feb 2010 11:50:04 +0000 (12:50 +0100)
modules/demux/mkv/mkv.cpp
modules/demux/mkv/mkv.hpp

index 1f9fbf97b5ec430a84fdcf736267c30a142626cc..68fbc44161ef65c639bc4440db97a70a40f221f1 100644 (file)
@@ -458,7 +458,7 @@ static void Seek( demux_t *p_demux, mtime_t i_date, double f_percent, chapter_it
 }
 
 /* Utility function for BlockDecode */
-static block_t *MemToBlock( demux_t *p_demux, uint8_t *p_mem, int i_mem, size_t offset)
+static block_t *MemToBlock( demux_t *p_demux, uint8_t *p_mem, size_t i_mem, size_t offset)
 {
     block_t *p_block;
     if( !(p_block = block_New( p_demux, i_mem + offset ) ) ) return NULL;
@@ -536,6 +536,8 @@ static void BlockDecode( demux_t *p_demux, KaxBlock *block, KaxSimpleBlock *simp
         {
             data = &block->GetBuffer(i);
         }
+        if( !data->Buffer() || data->Size() > SIZE_MAX )
+            break;
 
         if( tk->i_compression_type == MATROSKA_COMPRESSION_HEADER && tk->p_compression_data != NULL )
             p_block = MemToBlock( p_demux, data->Buffer(), data->Size(), tk->p_compression_data->GetSize() );
index 7a8e0bcf0bdcd326051daf9f14a9c788ff0e4ce4..679dc4f9581ce33432ce9f8f748e0ae184936b05 100644 (file)
@@ -34,6 +34,7 @@
  * early enough. */
 #define __STDC_FORMAT_MACROS 1
 #define __STDC_CONSTANT_MACROS 1
+#define __STDC_LIMIT_MACROS 1
 
 #ifdef HAVE_CONFIG_H
 # include "config.h"