[vlc-devel] [PATCH] demux: avi: handle zero sized lists (fix #9056)

Jean-Baptiste Kempf jb at videolan.org
Sat Aug 24 10:32:07 CEST 2013


Seems decent enough.

On 24 Aug, Francois Cartegnie wrote :
> ---
>  modules/demux/avi/libavi.c | 8 +++++---
>  modules/demux/avi/libavi.h | 1 +
>  2 files changed, 6 insertions(+), 3 deletions(-)
> 
> diff --git a/modules/demux/avi/libavi.c b/modules/demux/avi/libavi.c
> index c8410b3..14f4793 100644
> --- a/modules/demux/avi/libavi.c
> +++ b/modules/demux/avi/libavi.c
> @@ -112,6 +112,7 @@ static int AVI_ChunkRead_list( stream_t *s, avi_chunk_t *p_container )
>      avi_chunk_t *p_chk;
>      const uint8_t *p_peek;
>      bool b_seekable;
> +    int i_ret = VLC_SUCCESS;
>  
>      if( p_container->common.i_chunk_size > 0 && p_container->common.i_chunk_size < 4 )
>      {
> @@ -173,7 +174,7 @@ static int AVI_ChunkRead_list( stream_t *s, avi_chunk_t *p_container )
>          }
>          p_container->common.p_last = p_chk;
>  
> -        if( AVI_ChunkRead( s, p_chk, p_container ) )
> +        if( i_ret = AVI_ChunkRead( s, p_chk, p_container ) )
>          {
>              break;
>          }
> @@ -196,6 +197,7 @@ static int AVI_ChunkRead_list( stream_t *s, avi_chunk_t *p_container )
>      }
>      msg_Dbg( (vlc_object_t*)s, "</list \'%4.4s\'>", (char*)&p_container->list.i_type );
>  
> +    if ( i_ret == AVI_ZERO_FOURCC ) return i_ret;
>      return VLC_SUCCESS;
>  }
>  
> @@ -831,7 +833,7 @@ int  AVI_ChunkRead( stream_t *s, avi_chunk_t *p_chk, avi_chunk_t *p_father )
>      if( p_chk->common.i_chunk_fourcc == VLC_FOURCC( 0, 0, 0, 0 ) )
>      {
>          msg_Warn( (vlc_object_t*)s, "found null fourcc chunk (corrupted file?)" );
> -        return VLC_EGENERIC;
> +        return AVI_ZERO_FOURCC;
>      }
>      p_chk->common.p_father = p_father;
>  
> @@ -840,7 +842,7 @@ int  AVI_ChunkRead( stream_t *s, avi_chunk_t *p_chk, avi_chunk_t *p_father )
>      {
>          int i_return = AVI_Chunk_Function[i_index].AVI_ChunkRead_function( s, p_chk );
>          /* Handle strd alignment sections */
> -        if ( i_return == AVI_STRD_ZERO_CHUNK )
> +        if ( i_return == AVI_STRD_ZERO_CHUNK || i_return == AVI_ZERO_FOURCC )
>          {
>              if ( !p_father ) return VLC_EGENERIC;
>              return AVI_NextChunk( s, p_father );
> diff --git a/modules/demux/avi/libavi.h b/modules/demux/avi/libavi.h
> index 1ef830c..4ae9aa6 100644
> --- a/modules/demux/avi/libavi.h
> +++ b/modules/demux/avi/libavi.h
> @@ -179,6 +179,7 @@ typedef struct avi_chunk_dmlh_s
>  } avi_chunk_dmlh_t;
>  
>  #define AVI_STRD_ZERO_CHUNK     0xFF
> +#define AVI_ZERO_FOURCC         0xFE
>  
>  #define AVI_INDEX_OF_INDEXES    0x00
>  #define AVI_INDEX_OF_CHUNKS     0x01
> -- 
> 1.8.1.4
> 
> _______________________________________________
> vlc-devel mailing list
> To unsubscribe or modify your subscription options:
> https://mailman.videolan.org/listinfo/vlc-devel

-- 
Best regards,

-- 
Jean-Baptiste Kempf
http://www.jbkempf.com/ - +33 672 704 734
Sent from my Electronic Device



More information about the vlc-devel mailing list