aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndreas Rheinhardt <andreas.rheinhardt@gmail.com>2020-05-18 04:43:25 +0200
committerAndreas Rheinhardt <andreas.rheinhardt@gmail.com>2020-05-23 06:32:29 +0200
commit1e689518d508b96f2a6a6f3bbbb43f00eaf87d01 (patch)
tree82aa9e055515639e6a2662453e4277c340d58bb6
parent9b614826275e346ac17b9bc7ef5a58dded5b1855 (diff)
downloadffmpeg-1e689518d508b96f2a6a6f3bbbb43f00eaf87d01.tar.gz
avformat/webmdashenc: Don't segfault on invalid arguments
The current parsing process for adaptation_sets does not guarantee every adaptation set to contain at least one stream, because the loop exits immediately as soon as the end of the string has been reached, without checking whether the currently active adaptation set group is lacking a stream. This would lead to segfaults lateron as the rest of the code presumed that every adaptation set contains a stream. This commit fixes this by erroring out when the last adaptation set group is incomplete. Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
-rw-r--r--libavformat/webmdashenc.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/libavformat/webmdashenc.c b/libavformat/webmdashenc.c
index fd07b3e34a..3101e0a039 100644
--- a/libavformat/webmdashenc.c
+++ b/libavformat/webmdashenc.c
@@ -437,8 +437,13 @@ static int parse_adaptation_sets(AVFormatContext *s)
}
// syntax id=0,streams=0,1,2 id=1,streams=3,4 and so on
state = new_set;
- while (p < w->adaptation_sets + strlen(w->adaptation_sets)) {
- if (state == new_set && *p == ' ') {
+ while (1) {
+ if (*p == '\0') {
+ if (state == new_set)
+ break;
+ else
+ return AVERROR(EINVAL);
+ } else if (state == new_set && *p == ' ') {
p++;
continue;
} else if (state == new_set && !strncmp(p, "id=", 3)) {