Commit 860a0810 authored by Clément Bœsch's avatar Clément Bœsch

avcodec/assenc: fix potential overread.

parent 378a830e
...@@ -80,9 +80,16 @@ static int ass_encode_frame(AVCodecContext *avctx, ...@@ -80,9 +80,16 @@ static int ass_encode_frame(AVCodecContext *avctx,
* will be "Marked=N" instead of the layer num, so we will * will be "Marked=N" instead of the layer num, so we will
* have layer=0, which is fine. */ * have layer=0, which is fine. */
layer = strtol(ass, &p, 10); layer = strtol(ass, &p, 10);
if (*p) p += strcspn(p, ",") + 1; // skip layer or marked
if (*p) p += strcspn(p, ",") + 1; // skip start timestamp #define SKIP_ENTRY(ptr) do { \
if (*p) p += strcspn(p, ",") + 1; // skip end timestamp char *sep = strchr(ptr, ','); \
if (sep) \
ptr = sep + 1; \
} while (0)
SKIP_ENTRY(p); // skip layer or marked
SKIP_ENTRY(p); // skip start timestamp
SKIP_ENTRY(p); // skip end timestamp
snprintf(ass_line, sizeof(ass_line), "%d,%ld,%s", ++s->id, layer, p); snprintf(ass_line, sizeof(ass_line), "%d,%ld,%s", ++s->id, layer, p);
ass_line[strcspn(ass_line, "\r\n")] = 0; ass_line[strcspn(ass_line, "\r\n")] = 0;
ass = ass_line; ass = ass_line;
......
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