diff options
author | Oneric <oneric@oneric.stub> | 2020-10-13 03:09:34 +0200 |
---|---|---|
committer | Oleg Oshmyan <chortos@inbox.lv> | 2020-10-27 01:03:04 +0200 |
commit | 660024f12e33b1e7b5df377ddf2c5ecb3609ebb7 (patch) | |
tree | 72cc4c0963cd4538da05964a3d410d240b8220d3 | |
parent | 96c071d8240d57535073bbc77e154aed8658733b (diff) | |
download | libass-660024f12e33b1e7b5df377ddf2c5ecb3609ebb7.tar.bz2 libass-660024f12e33b1e7b5df377ddf2c5ecb3609ebb7.tar.xz |
Check for strdup failures in process_event_tail
strdup failures for event->Text and event->Effect are already guarded
against in ass_render.c and ass_parse.c.
event->Name is never used, thus also safe.
At this point event_format is guaranteed to be valid, so it doesn't
need to be checked.
-rw-r--r-- | libass/ass.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/libass/ass.c b/libass/ass.c index fd1c417..960fee1 100644 --- a/libass/ass.c +++ b/libass/ass.c @@ -338,6 +338,8 @@ static int process_event_tail(ASS_Track *track, ASS_Event *event, ASS_Event *target = event; char *format = strdup(track->event_format); + if (!format) + return -1; char *q = format; // format scanning pointer for (i = 0; i < n_ignored; ++i) { @@ -349,14 +351,14 @@ static int process_event_tail(ASS_Track *track, ASS_Event *event, if (ass_strcasecmp(tname, "Text") == 0) { char *last; event->Text = strdup(p); - if (*event->Text != 0) { + if (event->Text && *event->Text != 0) { last = event->Text + strlen(event->Text) - 1; if (last >= event->Text && *last == '\r') *last = 0; } event->Duration -= event->Start; free(format); - return 0; // "Text" is always the last + return event->Text ? 0 : -1; // "Text" is always the last } NEXT(p, token); @@ -792,7 +794,7 @@ static int process_events_line(ASS_Track *track, char *str) return -1; event = track->events + eid; - process_event_tail(track, event, str, 0); + return process_event_tail(track, event, str, 0); } else { ass_msg(track->library, MSGL_V, "Not understood: '%.30s'", str); } |