Merge commit 'af7ca6ea124b82b337a6b96e10963e88eba57ebe'
authorMichael Niedermayer <michaelni@gmx.at>
Tue, 21 Oct 2014 22:17:29 +0000 (00:17 +0200)
committerMichael Niedermayer <michaelni@gmx.at>
Tue, 21 Oct 2014 22:26:37 +0000 (00:26 +0200)
* commit 'af7ca6ea124b82b337a6b96e10963e88eba57ebe':
  nutdec: check av_new_packet return value

Conflicts:
libavformat/nutdec.c

See: bb502411ddb9fe1928d4a999693a3a49b83f8698
Merged-by: Michael Niedermayer <michaelni@gmx.at>
1  2 
libavformat/nutdec.c

index 0ecf2ec80dc925953dba458edad72584564db826,c3f5f4ba79e60820880fb476ac50948349fdaadd..ef29bdf79c810a5701cf1974e389f04c1075eba2
@@@ -1020,27 -848,12 +1019,28 @@@ static int decode_frame(NUTContext *nut
          return 1;
      }
  
-     if (av_new_packet(pkt, size + nut->header_len[header_idx]) < 0)
-         return AVERROR(ENOMEM);
+     ret = av_new_packet(pkt, size + nut->header_len[header_idx]);
+     if (ret < 0)
+         return ret;
      memcpy(pkt->data, nut->header[header_idx], nut->header_len[header_idx]);
      pkt->pos = avio_tell(bc); // FIXME
 -    avio_read(bc, pkt->data + nut->header_len[header_idx], size);
 +    if (stc->last_flags & FLAG_SM_DATA) {
 +        int sm_size;
 +        if (read_sm_data(s, bc, pkt, 0, pkt->pos + size) < 0)
 +            return AVERROR_INVALIDDATA;
 +        if (read_sm_data(s, bc, pkt, 1, pkt->pos + size) < 0)
 +            return AVERROR_INVALIDDATA;
 +        sm_size = avio_tell(bc) - pkt->pos;
 +        size      -= sm_size;
 +        pkt->size -= sm_size;
 +    }
 +
 +    ret = avio_read(bc, pkt->data + nut->header_len[header_idx], size);
 +    if (ret != size) {
 +        if (ret < 0)
 +            return ret;
 +    }
 +    av_shrink_packet(pkt, nut->header_len[header_idx] + ret);
  
      pkt->stream_index = stream_id;
      if (stc->last_flags & FLAG_KEY)