[FFmpeg-devel] [PATCH 1/2] avcodec/h264: keep SPS and PPS bitstream data

wm4 nfxjfg at googlemail.com
Thu Oct 1 19:26:47 CEST 2015


On Thu, 1 Oct 2015 19:08:21 +0200
Michael Niedermayer <michaelni at gmx.at> wrote:

> On Thu, Oct 01, 2015 at 06:13:20PM +0200, wm4 wrote:
> > Needed for the following VideotoolBox commit.
> > ---
> >  libavcodec/h264.h    |  4 ++++
> >  libavcodec/h264_ps.c | 20 ++++++++++++++++----
> >  2 files changed, 20 insertions(+), 4 deletions(-)
> > 
> > diff --git a/libavcodec/h264.h b/libavcodec/h264.h
> > index 7356288..eeb2aaf 100644
> > --- a/libavcodec/h264.h
> > +++ b/libavcodec/h264.h
> > @@ -229,6 +229,8 @@ typedef struct SPS {
> >      int residual_color_transform_flag;    ///< residual_colour_transform_flag
> >      int constraint_set_flags;             ///< constraint_set[0-3]_flag
> >      int new;                              ///< flag to keep track if the decoder context needs re-init due to changed SPS
> > +    uint8_t data[1 << 16];
> > +    int data_size;
> >  } SPS;
> >  
> >  /**
> > @@ -254,6 +256,8 @@ typedef struct PPS {
> >      uint8_t scaling_matrix8[6][64];
> >      uint8_t chroma_qp_table[2][QP_MAX_NUM+1];  ///< pre-scaled (with chroma_qp_index_offset) version of qp_table
> >      int chroma_qp_diff;
> > +    uint8_t data[1 << 16];
> > +    int data_size;
> >  } PPS;
> >  
> >  /**
> > diff --git a/libavcodec/h264_ps.c b/libavcodec/h264_ps.c
> > index 52d235c..fd16a95 100644
> > --- a/libavcodec/h264_ps.c
> > +++ b/libavcodec/h264_ps.c
> > @@ -307,6 +307,15 @@ int ff_h264_decode_seq_parameter_set(H264Context *h, int ignore_truncation)
> >      int i, log2_max_frame_num_minus4;
> >      SPS *sps;
> >  
> > +    sps = av_mallocz(sizeof(SPS));
> > +    if (!sps)
> > +        return AVERROR(ENOMEM);
> > +
> > +    sps->data_size = h->gb.buffer_end - h->gb.buffer;
> 
> the subtraction could overflow the 32bit int range leading to a
> truncated or negative data_size
> 
> [...]
> 

This is impossible. The C type used for NALs is int.


More information about the ffmpeg-devel mailing list