diff options
author | Clément Bœsch <u@pkh.me> | 2013-09-08 18:02:45 +0200 |
---|---|---|
committer | Clément Bœsch <u@pkh.me> | 2013-09-08 18:48:09 +0200 |
commit | 90fc00a623de44e137fe1601b91356e8cd8bdd54 (patch) | |
tree | 1673c23b8d12b4e706725aa739bd98e11dfc936c /libavformat/mpsubdec.c | |
parent | cfcd55db164e0acc0c30b2cf084e6eebe9741d34 (diff) | |
download | ffmpeg-90fc00a623de44e137fe1601b91356e8cd8bdd54.tar.gz |
avformat/subtitles: add a next line jumper and use it.
This fixes a bunch of possible overread in avformat with the idiom p +=
strcspn(p, "\n") + 1 (strcspn() can focus on the trailing '\0' if no
'\n' is found, so the +1 leads to an overread).
Note on lavf/matroskaenc: no extra subtitles.o Makefile dependency is
added because only the header is required for ff_subtitles_next_line().
Note on lavf/mpsubdec: code gets slightly complex to avoid an infinite
loop in the probing since there is no more forced increment.
Diffstat (limited to 'libavformat/mpsubdec.c')
-rw-r--r-- | libavformat/mpsubdec.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/libavformat/mpsubdec.c b/libavformat/mpsubdec.c index 6a0cefbeb6..c5bdcdb626 100644 --- a/libavformat/mpsubdec.c +++ b/libavformat/mpsubdec.c @@ -37,11 +37,16 @@ static int mpsub_probe(AVProbeData *p) const char *ptr_end = p->buf + p->buf_size; while (ptr < ptr_end) { + int inc; + if (!memcmp(ptr, "FORMAT=TIME", 11)) return AVPROBE_SCORE_EXTENSION; if (!memcmp(ptr, "FORMAT=", 7)) return AVPROBE_SCORE_EXTENSION / 3; - ptr += strcspn(ptr, "\n") + 1; + inc = ff_subtitles_next_line(ptr); + if (!inc) + break; + ptr += inc; } return 0; } |