From b23e4452a2366490a6203e616adf74eb97aab327 Mon Sep 17 00:00:00 2001 From: Florin Apostol Date: Fri, 12 Jun 2015 16:44:55 +0100 Subject: [PATCH] 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 --- ext/dash/gstmpdparser.c | 8 +++++--- tests/check/elements/dash_mpd.c | 22 ++++++++++++++++++++++ 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/ext/dash/gstmpdparser.c b/ext/dash/gstmpdparser.c index fe9e939235..25dea0892f 100644 --- a/ext/dash/gstmpdparser.c +++ b/ext/dash/gstmpdparser.c @@ -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 */ diff --git a/tests/check/elements/dash_mpd.c b/tests/check/elements/dash_mpd.c index a30baf4c0f..faa3e58944 100644 --- a/tests/check/elements/dash_mpd.c +++ b/tests/check/elements/dash_mpd.c @@ -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 = + "" + ""; + + 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);