X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavformat%2Fsamidec.c;h=8f97cb733190c4c63ab341db6305f9af93198d13;hb=bd96c54fe4819b3ca9a975e2083d67f4443c559b;hp=7ea1bdfdd97e3166b851c5151bf90d8edd7b3995;hpb=5ab44ff20cdc0e05adecbd0cd352d25fcb930094;p=ffmpeg diff --git a/libavformat/samidec.c b/libavformat/samidec.c index 7ea1bdfdd97..8f97cb73319 100644 --- a/libavformat/samidec.c +++ b/libavformat/samidec.c @@ -36,7 +36,7 @@ typedef struct { FFDemuxSubtitlesQueue q; } SAMIContext; -static int sami_probe(AVProbeData *p) +static int sami_probe(const AVProbeData *p) { char buf[6]; FFTextReader tr; @@ -89,12 +89,19 @@ static int sami_read_header(AVFormatContext *s) sub = ff_subtitles_queue_insert(&sami->q, buf.str, buf.len, !is_sync); if (!sub) { res = AVERROR(ENOMEM); + av_bprint_finalize(&hdr_buf, NULL); goto end; } if (is_sync) { const char *p = ff_smil_get_attr_ptr(buf.str, "Start"); sub->pos = pos; sub->pts = p ? strtol(p, NULL, 10) : 0; + if (sub->pts <= INT64_MIN/2 || sub->pts >= INT64_MAX/2) { + res = AVERROR_PATCHWELCOME; + av_bprint_finalize(&hdr_buf, NULL); + goto end; + } + sub->duration = -1; } } @@ -108,6 +115,8 @@ static int sami_read_header(AVFormatContext *s) ff_subtitles_queue_finalize(s, &sami->q); end: + if (res < 0) + ff_subtitles_queue_clean(&sami->q); av_bprint_finalize(&buf, NULL); return res; } @@ -133,7 +142,7 @@ static int sami_read_close(AVFormatContext *s) return 0; } -AVInputFormat ff_sami_demuxer = { +const AVInputFormat ff_sami_demuxer = { .name = "sami", .long_name = NULL_IF_CONFIG_SMALL("SAMI subtitle format"), .priv_data_size = sizeof(SAMIContext),