]> git.sesse.net Git - vlc/commitdiff
Protect against broken V_QUICKTIME in mkv.
authorLaurent Aimar <fenrir@videolan.org>
Mon, 15 Dec 2008 22:19:04 +0000 (23:19 +0100)
committerLaurent Aimar <fenrir@videolan.org>
Sun, 22 Mar 2009 11:26:47 +0000 (12:26 +0100)
My mkvmerge version seems to generate broken files.

modules/demux/mkv/matroska_segment.cpp

index 91cf2cad59772c818f708d152a95f5467d7a8b93..6002db20c1aabf84483cbd410615da3460dfcb2a 100644 (file)
@@ -790,15 +790,21 @@ bool matroska_segment_c::Select( mtime_t i_start_time )
                                                        tracks[i_track]->p_extra_data,
                                                        tracks[i_track]->i_extra_data,
                                                        true );
-            MP4_ReadBoxCommon( p_mp4_stream, p_box );
-            MP4_ReadBox_sample_vide( p_mp4_stream, p_box );
-            tracks[i_track]->fmt.i_codec = p_box->i_type;
-            tracks[i_track]->fmt.video.i_width = p_box->data.p_sample_vide->i_width;
-            tracks[i_track]->fmt.video.i_height = p_box->data.p_sample_vide->i_height;
-            tracks[i_track]->fmt.i_extra = p_box->data.p_sample_vide->i_qt_image_description;
-            tracks[i_track]->fmt.p_extra = malloc( tracks[i_track]->fmt.i_extra );
-            memcpy( tracks[i_track]->fmt.p_extra, p_box->data.p_sample_vide->p_qt_image_description, tracks[i_track]->fmt.i_extra );
-            MP4_FreeBox_sample_vide( p_box );
+            if( MP4_ReadBoxCommon( p_mp4_stream, p_box ) &&
+                MP4_ReadBox_sample_vide( p_mp4_stream, p_box ) )
+            {
+                tracks[i_track]->fmt.i_codec = p_box->i_type;
+                tracks[i_track]->fmt.video.i_width = p_box->data.p_sample_vide->i_width;
+                tracks[i_track]->fmt.video.i_height = p_box->data.p_sample_vide->i_height;
+                tracks[i_track]->fmt.i_extra = p_box->data.p_sample_vide->i_qt_image_description;
+                tracks[i_track]->fmt.p_extra = malloc( tracks[i_track]->fmt.i_extra );
+                memcpy( tracks[i_track]->fmt.p_extra, p_box->data.p_sample_vide->p_qt_image_description, tracks[i_track]->fmt.i_extra );
+                MP4_FreeBox_sample_vide( p_box );
+            }
+            else
+            {
+                free( p_box );
+            }
             stream_Delete( p_mp4_stream );
         }
         else if( !strcmp( tracks[i_track]->psz_codec, "A_MS/ACM" ) )