avformat/hls: Fix handling of EXT-X-BYTERANGE streams over 2GB

Replace uses of atoi() with strtoll() when trying to read values into
int64_t variables.

Fixes Kodi trac #16926:
http://trac.kodi.tv/ticket/16926

(cherry picked from commit a6f5e25ad9)
This commit is contained in:
Anssi Hannula 2016-09-24 09:29:03 +03:00
parent 6fc29572fb
commit 748a4747da
1 changed files with 5 additions and 5 deletions

View File

@ -416,10 +416,10 @@ static struct segment *new_init_section(struct playlist *pls,
} }
if (info->byterange[0]) { if (info->byterange[0]) {
sec->size = atoi(info->byterange); sec->size = strtoll(info->byterange, NULL, 10);
ptr = strchr(info->byterange, '@'); ptr = strchr(info->byterange, '@');
if (ptr) if (ptr)
sec->url_offset = atoi(ptr+1); sec->url_offset = strtoll(ptr+1, NULL, 10);
} else { } else {
/* the entire file is the init section */ /* the entire file is the init section */
sec->size = -1; sec->size = -1;
@ -731,7 +731,7 @@ static int parse_playlist(HLSContext *c, const char *url,
ret = ensure_playlist(c, &pls, url); ret = ensure_playlist(c, &pls, url);
if (ret < 0) if (ret < 0)
goto fail; goto fail;
pls->target_duration = atoi(ptr) * AV_TIME_BASE; pls->target_duration = strtoll(ptr, NULL, 10) * AV_TIME_BASE;
} else if (av_strstart(line, "#EXT-X-MEDIA-SEQUENCE:", &ptr)) { } else if (av_strstart(line, "#EXT-X-MEDIA-SEQUENCE:", &ptr)) {
ret = ensure_playlist(c, &pls, url); ret = ensure_playlist(c, &pls, url);
if (ret < 0) if (ret < 0)
@ -760,10 +760,10 @@ static int parse_playlist(HLSContext *c, const char *url,
is_segment = 1; is_segment = 1;
duration = atof(ptr) * AV_TIME_BASE; duration = atof(ptr) * AV_TIME_BASE;
} else if (av_strstart(line, "#EXT-X-BYTERANGE:", &ptr)) { } else if (av_strstart(line, "#EXT-X-BYTERANGE:", &ptr)) {
seg_size = atoi(ptr); seg_size = strtoll(ptr, NULL, 10);
ptr = strchr(ptr, '@'); ptr = strchr(ptr, '@');
if (ptr) if (ptr)
seg_offset = atoi(ptr+1); seg_offset = strtoll(ptr+1, NULL, 10);
} else if (av_strstart(line, "#", NULL)) { } else if (av_strstart(line, "#", NULL)) {
continue; continue;
} else if (line[0]) { } else if (line[0]) {