diff --git a/modules/services_discovery/upnp.cpp b/modules/services_discovery/upnp.cpp
index 483f374..d6f65b9 100644
--- a/modules/services_discovery/upnp.cpp
+++ b/modules/services_discovery/upnp.cpp
@@ -259,6 +259,13 @@ IXML_Document* parseBrowseResult( IXML_Document* p_doc )
{
assert( p_doc );
+ const char* psz_raw_didl = xml_getChildElementValue( p_doc, "Result" );
+
+ if( !psz_raw_didl )
+ return NULL;
+
+ IXML_Document* p_result_doc = ixmlParseBuffer( psz_raw_didl );
+ if( !p_result_doc ) {
/* Missing namespaces confuse the ixml parser. This is a very ugly
* hack but it is needeed until devices start sending valid XML.
*
@@ -269,23 +276,18 @@ IXML_Document* parseBrowseResult( IXML_Document* p_doc )
* definitions so the ixml parser understands it.
*
* If you know of a better workaround, please oh please fix it */
- const char* psz_xml_result_fmt = ""
- "%s";
+ const char* psz_xml_result_fmt = ""
+ "%s";
- char* psz_xml_result_string = NULL;
- const char* psz_raw_didl = xml_getChildElementValue( p_doc, "Result" );
+ char* psz_xml_result_string = NULL;
+ if( -1 == asprintf( &psz_xml_result_string,
+ psz_xml_result_fmt,
+ psz_raw_didl) )
+ return NULL;
- if( !psz_raw_didl )
- return NULL;
-
- if( -1 == asprintf( &psz_xml_result_string,
- psz_xml_result_fmt,
- psz_raw_didl) )
- return NULL;
-
-
- IXML_Document* p_result_doc = ixmlParseBuffer( psz_xml_result_string );
- free( psz_xml_result_string );
+ p_result_doc = ixmlParseBuffer( psz_xml_result_string );
+ free( psz_xml_result_string );
+ }
if( !p_result_doc )
return NULL;