subparse: fix crash when parsing invalid timestamps in mpl2

Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=49245

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2989>
This commit is contained in:
Matthew Waters 2022-09-07 16:35:38 +10:00 committed by GStreamer Marge Bot
parent 1c69fe3fc8
commit 1e269a3c6d

View file

@ -37,11 +37,12 @@ static gchar *
mpl2_parse_line (ParserState * state, const gchar * line, guint line_num)
{
GString *markup;
const char *orig_line = line;
gint dc_start, dc_stop;
/* parse subtitle file line */
if (sscanf (line, "[%u][%u]", &dc_start, &dc_stop) != 2) {
GST_WARNING ("failed to extract timestamps for line '%s'", line);
GST_WARNING ("failed to extract timestamps for line '%s'", orig_line);
return NULL;
}
@ -50,8 +51,18 @@ mpl2_parse_line (ParserState * state, const gchar * line, guint line_num)
state->duration = (GST_SECOND / 10 * dc_stop) - state->start_time;
/* skip brackets with timestamps */
line = strchr (line, ']') + 1;
line = strchr (line, ']') + 1;
line = strchr (line, ']');
if (!line) {
GST_WARNING ("invalid, timestamp missing first \']\' for '%s'", orig_line);
return NULL;
}
line += 1;
line = strchr (line, ']');
if (!line) {
GST_WARNING ("invalid, timestamp missing second \']\' for '%s'", orig_line);
return NULL;
}
line += 1;
markup = g_string_new (NULL);