Commit f5dd1eb7 authored by Aurelien Jacobs's avatar Aurelien Jacobs

srtdec: ensure we don't read 1 byte after buffer end if the buffer is not

properly terminated.

Originally committed as revision 26201 to svn://svn.ffmpeg.org/ffmpeg/trunk
parent 6734f2c8
...@@ -65,7 +65,7 @@ static const char *srt_to_ass(AVCodecContext *avctx, char *out, char *out_end, ...@@ -65,7 +65,7 @@ static const char *srt_to_ass(AVCodecContext *avctx, char *out, char *out_end,
out += snprintf(out, out_end-out, "{\\an1}{\\pos(%d,%d)}", x1, y1); out += snprintf(out, out_end-out, "{\\an1}{\\pos(%d,%d)}", x1, y1);
} }
for (; *in && out < out_end && !end; in++) { for (; out < out_end && !end && *in; in++) {
switch (*in) { switch (*in) {
case '\r': case '\r':
break; break;
...@@ -211,13 +211,14 @@ static int srt_decode_frame(AVCodecContext *avctx, ...@@ -211,13 +211,14 @@ static int srt_decode_frame(AVCodecContext *avctx,
int ts_start, ts_end, x1 = -1, y1 = -1, x2 = -1, y2 = -1; int ts_start, ts_end, x1 = -1, y1 = -1, x2 = -1, y2 = -1;
char buffer[2048]; char buffer[2048];
const char *ptr = avpkt->data; const char *ptr = avpkt->data;
const char *end = avpkt->data + avpkt->size;
if (avpkt->size <= 0) if (avpkt->size <= 0)
return avpkt->size; return avpkt->size;
ff_ass_init(sub); ff_ass_init(sub);
while (*ptr) { while (ptr < end && *ptr) {
ptr = read_ts(ptr, &ts_start, &ts_end, &x1, &y1, &x2, &y2); ptr = read_ts(ptr, &ts_start, &ts_end, &x1, &y1, &x2, &y2);
if (!ptr) if (!ptr)
break; break;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment