dashdemux: fixed segfault for missing default namespace
authorFlorin Apostol <florin.apostol@oregan.net>
Fri, 12 Jun 2015 15:44:55 +0000 (16:44 +0100)
committerSebastian Dröge <sebastian@centricular.com>
Fri, 12 Jun 2015 20:45:51 +0000 (22:45 +0200)
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

ext/dash/gstmpdparser.c
tests/check/elements/dash_mpd.c

index fe9e93923571f22da248160e21c50a77f3cadf24..25dea0892f1751a700b75c83a83839fd80d99878 100644 (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 */
index a30baf4c0f6719bd0138083ecc22b6ff4a2c468c..faa3e58944ee7d1c42170cfedd581a3ac0a9d6cc 100644 (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);