X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavformat%2Fshortendec.c;h=f7390b2e6289d6d6e3d1de19b5ba11549f176d13;hb=1eb311011548867b118dd461442365195fb5fb7d;hp=42fcdf75c39bce51b6604c2f833d059e6fe49b91;hpb=34a0a9746b2f441db7c45983838a88aa87a33834;p=ffmpeg diff --git a/libavformat/shortendec.c b/libavformat/shortendec.c index 42fcdf75c39..f7390b2e628 100644 --- a/libavformat/shortendec.c +++ b/libavformat/shortendec.c @@ -25,7 +25,7 @@ #include "rawdec.h" #include "libavcodec/golomb.h" -static int shn_probe(AVProbeData *p) +static int shn_probe(const AVProbeData *p) { GetBitContext gb; int version, internal_ftype, channels, blocksize; @@ -40,12 +40,18 @@ static int shn_probe(AVProbeData *p) channels = get_ur_golomb_shorten(&gb, 0); blocksize = 256; } else { - int k; + unsigned k; k = get_ur_golomb_shorten(&gb, 2); + if (k > 31) + return 0; internal_ftype = get_ur_golomb_shorten(&gb, k); k = get_ur_golomb_shorten(&gb, 2); + if (k > 31) + return 0; channels = get_ur_golomb_shorten(&gb, k); k = get_ur_golomb_shorten(&gb, 2); + if (k > 31) + return 0; blocksize = get_ur_golomb_shorten(&gb, k); } @@ -59,6 +65,7 @@ static int shn_probe(AVProbeData *p) return AVPROBE_SCORE_EXTENSION + 1; } +FF_RAW_DEMUXER_CLASS(shorten) AVInputFormat ff_shorten_demuxer = { .name = "shn", .long_name = NULL_IF_CONFIG_SMALL("raw Shorten"), @@ -68,4 +75,6 @@ AVInputFormat ff_shorten_demuxer = { .flags = AVFMT_NOBINSEARCH | AVFMT_NOGENSEARCH | AVFMT_NO_BYTE_SEEK | AVFMT_NOTIMESTAMPS, .extensions = "shn", .raw_codec_id = AV_CODEC_ID_SHORTEN, + .priv_data_size = sizeof(FFRawDemuxerContext), + .priv_class = &shorten_demuxer_class, };