mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-06-07 07:58:51 +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
|
static GstFlowReturn
|
||||||
gst_ebml_read_ascii (GstEbmlRead * ebml, guint32 * id, gchar ** str)
|
gst_ebml_read_string (GstEbmlRead * ebml, guint32 * id, gchar ** str)
|
||||||
{
|
{
|
||||||
guint8 *data;
|
guint8 *data;
|
||||||
guint size;
|
guint size;
|
||||||
|
@ -797,6 +797,36 @@ gst_ebml_read_ascii (GstEbmlRead * ebml, guint32 * id, gchar ** str)
|
||||||
return ret;
|
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.
|
* 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;
|
guint64 oldoff = ebml->offset;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
ret = gst_ebml_read_ascii (ebml, id, str);
|
ret = gst_ebml_read_string (ebml, id, str);
|
||||||
if (ret != GST_FLOW_OK)
|
if (ret != GST_FLOW_OK)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue