diff --git a/libavformat/hlsenc.c b/libavformat/hlsenc.c index 9db9294d03..50f19f9694 100644 --- a/libavformat/hlsenc.c +++ b/libavformat/hlsenc.c @@ -30,6 +30,7 @@ #include "libavutil/attributes_internal.h" #include "libavutil/avassert.h" +#include "libavutil/macros.h" #include "libavutil/mathematics.h" #include "libavutil/avstring.h" #include "libavutil/bprint.h" @@ -1211,11 +1212,13 @@ static int parse_playlist(AVFormatContext *s, const char *url, VariantStream *vs ptr = av_stristr(line, "URI=\""); if (ptr) { ptr += strlen("URI=\""); - end = av_stristr(ptr, ","); + end = strchr(ptr, '"'); if (end) { - av_strlcpy(vs->key_uri, ptr, end - ptr); + av_strlcpy(vs->key_uri, ptr, + FFMIN(end - ptr + 1, sizeof(vs->key_uri))); } else { - av_strlcpy(vs->key_uri, ptr, sizeof(vs->key_uri)); + ret = AVERROR_INVALIDDATA; + goto fail; } } @@ -1224,7 +1227,7 @@ static int parse_playlist(AVFormatContext *s, const char *url, VariantStream *vs ptr += strlen("IV=0x"); end = av_stristr(ptr, ","); if (end) { - av_strlcpy(vs->iv_string, ptr, end - ptr); + av_strlcpy(vs->iv_string, ptr, FFMIN(end - ptr + 1, sizeof(vs->iv_string))); } else { av_strlcpy(vs->iv_string, ptr, sizeof(vs->iv_string)); }