|
|
|
@ -164,16 +164,26 @@ static int gif_read_ext(AVFormatContext *s) |
|
|
|
|
if ((ret = avio_skip(pb, sb_size - 3)) < 0 ) |
|
|
|
|
return ret; |
|
|
|
|
} else if (ext_label == GIF_APP_EXT_LABEL) { |
|
|
|
|
uint8_t netscape_ext[sizeof(NETSCAPE_EXT_STR)-1 + 2]; |
|
|
|
|
uint8_t data[256]; |
|
|
|
|
|
|
|
|
|
if ((sb_size = avio_r8(pb)) != strlen(NETSCAPE_EXT_STR)) |
|
|
|
|
return 0; |
|
|
|
|
ret = avio_read(pb, netscape_ext, sizeof(netscape_ext)); |
|
|
|
|
if (ret < sizeof(netscape_ext)) |
|
|
|
|
sb_size = avio_r8(pb); |
|
|
|
|
ret = avio_read(pb, data, sb_size); |
|
|
|
|
if (ret < 0 || !sb_size) |
|
|
|
|
return ret; |
|
|
|
|
gdc->total_iter = avio_rl16(pb); |
|
|
|
|
if (gdc->total_iter == 0) |
|
|
|
|
gdc->total_iter = -1; |
|
|
|
|
|
|
|
|
|
if (sb_size == strlen(NETSCAPE_EXT_STR)) { |
|
|
|
|
sb_size = avio_r8(pb); |
|
|
|
|
ret = avio_read(pb, data, sb_size); |
|
|
|
|
if (ret < 0 || !sb_size) |
|
|
|
|
return ret; |
|
|
|
|
|
|
|
|
|
if (sb_size == 3 && data[0] == 1) { |
|
|
|
|
gdc->total_iter = AV_RL16(data+1); |
|
|
|
|
|
|
|
|
|
if (gdc->total_iter == 0) |
|
|
|
|
gdc->total_iter = -1; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if ((ret = gif_skip_subblocks(pb)) < 0) |
|
|
|
|