]> git.sesse.net Git - vlc/commitdiff
Fixed a segfault and a possible memory leak in xml_reader_t API
authorLaurent Aimar <fenrir@videolan.org>
Tue, 17 Aug 2010 21:24:26 +0000 (23:24 +0200)
committerLaurent Aimar <fenrir@videolan.org>
Tue, 17 Aug 2010 21:33:38 +0000 (23:33 +0200)
 xml_ReaderReset(reader, NULL) followed by xml_ReaderDelete(reader) lead
to a double free.
 xml_ReaderReset(reader, stream) would leak the module upon error.

src/misc/xml.c

index 6e23522e9e1265bb4df85113f22b6945b61c35bc..1748bfc9f69a2729a1c2185fc60d477152793f07 100644 (file)
@@ -98,7 +98,9 @@ xml_reader_t *xml_ReaderCreate(vlc_object_t *obj, stream_t *stream)
  */
 void xml_ReaderDelete(xml_reader_t *reader)
 {
-    module_unneed(reader, reader->p_module);
+    if (reader->p_stream)
+        module_stop(reader, reader->p_module);
+    module_release(reader->p_module);
     vlc_object_release(reader);
 }
 
@@ -123,6 +125,7 @@ xml_reader_t *xml_ReaderReset(xml_reader_t *reader, stream_t *stream)
     reader->p_stream = stream;
     if ((stream != NULL) && module_start(reader, reader->p_module))
     {
+        module_release(reader->p_module);
         vlc_object_release(reader);
         return NULL;
     }