dashdemux: fixed segfault for missing default namespace

Added a check for a_node->ns before accessing a_node->ns->href in
gst_mpdparser_get_xml_node_namespace. This could happen if the xml
is missing the default namespace.

https://bugzilla.gnome.org/show_bug.cgi?id=750866
This commit is contained in:
Florin Apostol 2015-06-12 16:44:55 +01:00 committed by Sebastian Dröge
parent 62f25894a5
commit b23e4452a2
2 changed files with 27 additions and 3 deletions

View file

@ -958,9 +958,11 @@ gst_mpdparser_get_xml_node_namespace (xmlNode * a_node, const gchar * prefix)
if (prefix == NULL) {
/* return the default namespace */
namespace = xmlMemStrdup ((const gchar *) a_node->ns->href);
if (namespace) {
GST_LOG (" - default namespace: %s", namespace);
if (a_node->ns) {
namespace = xmlMemStrdup ((const gchar *) a_node->ns->href);
if (namespace) {
GST_LOG (" - default namespace: %s", namespace);
}
}
} else {
/* look for the specified prefix in the namespace list */

View file

@ -412,6 +412,27 @@ GST_START_TEST (dash_mpdparser_no_end_tag)
GST_END_TEST;
/*
* Test parsing an MPD with no default namespace
*/
GST_START_TEST (dash_mpdparser_no_default_namespace)
{
const gchar *xml =
"<?xml version=\"1.0\"?>"
"<MPD profiles=\"urn:mpeg:dash:profile:isoff-main:2011\"></MPD>";
gboolean ret;
GstMpdClient *mpdclient = gst_mpd_client_new ();
ret = gst_mpd_parse (mpdclient, xml, strlen (xml));
assert_equals_int (ret, TRUE);
gst_mpd_client_free (mpdclient);
}
GST_END_TEST;
/*
* create a test suite containing all dash testcases
*/
@ -444,6 +465,7 @@ dash_suite (void)
tcase_add_test (tc_negativeTests, dash_mpdparser_missing_xml);
tcase_add_test (tc_negativeTests, dash_mpdparser_missing_mpd);
tcase_add_test (tc_negativeTests, dash_mpdparser_no_end_tag);
tcase_add_test (tc_negativeTests, dash_mpdparser_no_default_namespace);
suite_add_tcase (s, tc_simpleMPD);
suite_add_tcase (s, tc_negativeTests);