X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavformat%2Fcdxl.c;h=5718fc3e21430e8faa0733a6884d8dd44422cc50;hb=d643bd496089612390f47bda61478fca4e2fe906;hp=94a063c81311b09fd8b6e94ec7f5ed69685724d4;hpb=b8eb0827f053230dd919bc73e25381b47b4fe1a7;p=ffmpeg diff --git a/libavformat/cdxl.c b/libavformat/cdxl.c index 94a063c8131..5718fc3e214 100644 --- a/libavformat/cdxl.c +++ b/libavformat/cdxl.c @@ -40,7 +40,7 @@ typedef struct CDXLDemuxContext { int64_t filesize; } CDXLDemuxContext; -static int cdxl_read_probe(AVProbeData *p) +static int cdxl_read_probe(const AVProbeData *p) { int score = AVPROBE_SCORE_EXTENSION + 10; @@ -131,7 +131,8 @@ static int cdxl_read_packet(AVFormatContext *s, AVPacket *pkt) height = AV_RB16(&cdxl->header[16]); palette_size = AV_RB16(&cdxl->header[20]); audio_size = AV_RB16(&cdxl->header[22]); - if (FFALIGN(width, 16) * (uint64_t)height * cdxl->header[19] > INT_MAX) + if (cdxl->header[19] == 0 || + FFALIGN(width, 16) * (uint64_t)height * cdxl->header[19] > INT_MAX) return AVERROR_INVALIDDATA; if (format == 0x20) image_size = width * height * cdxl->header[19] / 8; @@ -201,12 +202,11 @@ static int cdxl_read_packet(AVFormatContext *s, AVPacket *pkt) avpriv_set_pts_info(st, 64, 1, cdxl->sample_rate); } - if (av_new_packet(pkt, video_size + CDXL_HEADER_SIZE) < 0) - return AVERROR(ENOMEM); + if ((ret = av_new_packet(pkt, video_size + CDXL_HEADER_SIZE)) < 0) + return ret; memcpy(pkt->data, cdxl->header, CDXL_HEADER_SIZE); ret = avio_read(pb, pkt->data + CDXL_HEADER_SIZE, video_size); if (ret < 0) { - av_packet_unref(pkt); return ret; } av_shrink_packet(pkt, CDXL_HEADER_SIZE + ret);