mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-28 19:20:35 +00:00
ebml: Validate 7-bit ASCII in gst_ebml_read_ascii
This was triggering an UTF-8 assertion in gst_caps_set_simple for corrupt files with garbage as codec id. Test case: gstreamer_error_trying_to_set_invalid_utf8_as_codec_id.webm Old gst_ebml_read_ascii renamed to gst_ebml_read_string, also used by gst_ebml_read_utf8. Unlike for UTF-8, failure to validate is an error, as gst_ebml_read_ascii is used for reading doctype and codec id and we might just as well give up early in those cases.
This commit is contained in:
parent
d146971128
commit
c712d28796
1 changed files with 34 additions and 4 deletions
|
@ -776,11 +776,11 @@ gst_ebml_read_float (GstEbmlRead * ebml, guint32 * id, gdouble * num)
|
|||
}
|
||||
|
||||
/*
|
||||
* Read the next element as an ASCII string.
|
||||
* Read the next element as a C string.
|
||||
*/
|
||||
|
||||
GstFlowReturn
|
||||
gst_ebml_read_ascii (GstEbmlRead * ebml, guint32 * id, gchar ** str)
|
||||
static GstFlowReturn
|
||||
gst_ebml_read_string (GstEbmlRead * ebml, guint32 * id, gchar ** str)
|
||||
{
|
||||
guint8 *data;
|
||||
guint size;
|
||||
|
@ -797,6 +797,36 @@ gst_ebml_read_ascii (GstEbmlRead * ebml, guint32 * id, gchar ** str)
|
|||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
* Read the next element as an ASCII string.
|
||||
*/
|
||||
|
||||
GstFlowReturn
|
||||
gst_ebml_read_ascii (GstEbmlRead * ebml, guint32 * id, gchar ** str)
|
||||
{
|
||||
GstFlowReturn ret;
|
||||
gchar *iter;
|
||||
|
||||
#ifndef GST_DISABLE_GST_DEBUG
|
||||
guint64 oldoff = ebml->offset;
|
||||
#endif
|
||||
|
||||
ret = gst_ebml_read_string (ebml, id, str);
|
||||
if (ret != GST_FLOW_OK)
|
||||
return ret;
|
||||
|
||||
for (iter = *str; *iter != '\0'; iter++) {
|
||||
if (G_UNLIKELY (*iter & 0x80)) {
|
||||
GST_ERROR_OBJECT (ebml,
|
||||
"Invalid ASCII string at offset %" G_GUINT64_FORMAT, oldoff);
|
||||
g_free (*str);
|
||||
return GST_FLOW_ERROR;
|
||||
}
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
* Read the next element as a UTF-8 string.
|
||||
*/
|
||||
|
@ -810,7 +840,7 @@ gst_ebml_read_utf8 (GstEbmlRead * ebml, guint32 * id, gchar ** str)
|
|||
guint64 oldoff = ebml->offset;
|
||||
#endif
|
||||
|
||||
ret = gst_ebml_read_ascii (ebml, id, str);
|
||||
ret = gst_ebml_read_string (ebml, id, str);
|
||||
if (ret != GST_FLOW_OK)
|
||||
return ret;
|
||||
|
||||
|
|
Loading…
Reference in a new issue