diff options
author | Clément Bœsch <u@pkh.me> | 2013-09-08 18:02:45 +0200 |
---|---|---|
committer | Alexander Strasser <eclipse7@gmx.net> | 2013-09-16 21:39:34 +0200 |
commit | c09acf9882803fd17762689859032c0866568e27 (patch) | |
tree | 5bbaf9d809b24e74c57a0794149d4d579e36a78f /libavformat/subtitles.h | |
parent | a0779a2ee504e9f38cab91296ba96fa189804f9b (diff) | |
download | ffmpeg-c09acf9882803fd17762689859032c0866568e27.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.
NOTE:
Code of function ff_subtitles_next_line fixed by Alexander Strasser.
The original code from master did test the wrong character, but was
corrected by a subsequent commit. That commit however is not backported,
so it had to be fixed in this commit for the backport.
Conflicts:
libavformat/mpl2dec.c
(cherry picked from commit 90fc00a623de44e137fe1601b91356e8cd8bdd54)
Signed-off-by: Alexander Strasser <eclipse7@gmx.net>
Diffstat (limited to 'libavformat/subtitles.h')
-rw-r--r-- | libavformat/subtitles.h | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/libavformat/subtitles.h b/libavformat/subtitles.h index 455b374f25..8f68e7bda1 100644 --- a/libavformat/subtitles.h +++ b/libavformat/subtitles.h @@ -96,4 +96,17 @@ const char *ff_smil_get_attr_ptr(const char *s, const char *attr); */ void ff_subtitles_read_chunk(AVIOContext *pb, AVBPrint *buf); +/** + * Get the number of characters to increment to jump to the next line, or to + * the end of the string. + */ +static av_always_inline int ff_subtitles_next_line(const char *ptr) +{ + int n = strcspn(ptr, "\n"); + ptr += n; + if (*ptr == '\n') + n++; + return n; +} + #endif /* AVFORMAT_SUBTITLES_H */ |