summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOneric <oneric@oneric.stub>2020-10-13 03:09:34 +0200
committerOleg Oshmyan <chortos@inbox.lv>2020-10-27 01:03:04 +0200
commit660024f12e33b1e7b5df377ddf2c5ecb3609ebb7 (patch)
tree72cc4c0963cd4538da05964a3d410d240b8220d3
parent96c071d8240d57535073bbc77e154aed8658733b (diff)
downloadlibass-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.c8
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);
}