vlc | branch: master | Laurent Aimar <[email protected]> | Tue Aug 17 
23:24:26 2010 +0200| [45991a807b72af682a854b323407d7fd10e518cf] | committer: 
Laurent Aimar 

Fixed a segfault and a possible memory leak in xml_reader_t API

 xml_ReaderReset(reader, NULL) followed by xml_ReaderDelete(reader) lead
to a double free.
 xml_ReaderReset(reader, stream) would leak the module upon error.

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=45991a807b72af682a854b323407d7fd10e518cf
---

 src/misc/xml.c |    5 ++++-
 1 files changed, 4 insertions(+), 1 deletions(-)

diff --git a/src/misc/xml.c b/src/misc/xml.c
index 6e23522..1748bfc 100644
--- a/src/misc/xml.c
+++ b/src/misc/xml.c
@@ -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;
     }

_______________________________________________
vlc-commits mailing list
[email protected]
http://mailman.videolan.org/listinfo/vlc-commits

Reply via email to