[vlc-commits] commit: Fixed a segfault and a possible memory leak in xml_reader_t API ( Laurent Aimar )

git at videolan.org git at videolan.org
Tue Aug 17 23:38:06 CEST 2010


vlc | branch: master | Laurent Aimar <fenrir at videolan.org> | 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;
     }



More information about the vlc-commits mailing list