[vlc-devel] commit: * Fix memleak (#2352) ( Rémi Duraffort )

git version control git at videolan.org
Mon Dec 15 20:00:16 CET 2008


vlc | branch: master | Rémi Duraffort <ivoire at videolan.org> | Mon Dec 15 19:59:40 2008 +0100| [dfce44aa4f81fb2a5abf51435b87bd7cd70316f1] | committer: Rémi Duraffort 

* Fix memleak (#2352)
* Use NULL instead of 0
* cosmetics.

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

 modules/misc/xml/xtag.c |   65 +++++++++++++++++++++++++++++-----------------
 1 files changed, 41 insertions(+), 24 deletions(-)

diff --git a/modules/misc/xml/xtag.c b/modules/misc/xml/xtag.c
index 475cef8..3f0f311 100644
--- a/modules/misc/xml/xtag.c
+++ b/modules/misc/xml/xtag.c
@@ -193,26 +193,32 @@ static xml_reader_t *ReaderCreate( xml_t *p_xml, stream_t *s )
         }
         p_buffer = p_new;
     }
-    p_buffer[ i_pos + i_size ] = 0; /* 0 terminated string */
-
     if( i_pos + i_size == 0 )
     {
         msg_Dbg( p_xml, "empty XML" );
         free( p_buffer );
-        return 0;
+        return NULL;
     }
+    p_buffer[ i_pos + i_size ] = '\0'; /* 0 terminated string */
 
     p_root = xtag_new_parse( p_buffer, i_buffer );
     if( !p_root )
     {
         msg_Warn( p_xml, "couldn't parse XML" );
         free( p_buffer );
-        return 0;
+        return NULL;
     }
 
     free( p_buffer );
     p_reader = malloc( sizeof(xml_reader_t) );
+    if( !p_reader )
+        return NULL;
     p_reader->p_sys = malloc( sizeof(xml_reader_sys_t) );
+    if( !p_reader->p_sys )
+    {
+        free( p_reader );
+        return NULL;
+    }
     p_reader->p_sys->p_root = p_root;
     p_reader->p_sys->p_curtag = NULL;
     p_reader->p_sys->p_curattr = NULL;
@@ -252,12 +258,12 @@ static int ReaderRead( xml_reader_t *p_reader )
         return 1;
     }
 
-    while( 1 )
+    while( true )
     {
         if( (p_child = xtag_next_child( p_reader->p_sys->p_curtag, 0 )) )
         {
             p_reader->p_sys->p_curtag = p_child;
-            p_reader->p_sys->p_curattr = 0;
+            p_reader->p_sys->p_curattr = NULL;
             p_reader->p_sys->b_endtag = false;
             return 1;
         }
@@ -279,10 +285,12 @@ static int ReaderRead( xml_reader_t *p_reader )
 
 static int ReaderNodeType( xml_reader_t *p_reader )
 {
-    if( p_reader->p_sys->p_curtag->name &&
-        p_reader->p_sys->b_endtag ) return XML_READER_ENDELEM;
-    if( p_reader->p_sys->p_curtag->name ) return XML_READER_STARTELEM;
-    if( p_reader->p_sys->p_curtag->pcdata ) return XML_READER_TEXT;
+    if( p_reader->p_sys->p_curtag->name && p_reader->p_sys->b_endtag )
+        return XML_READER_ENDELEM;
+    if( p_reader->p_sys->p_curtag->name )
+        return XML_READER_STARTELEM;
+    if( p_reader->p_sys->p_curtag->pcdata )
+        return XML_READER_TEXT;
     return XML_READER_NONE;
 }
 
@@ -300,8 +308,7 @@ static char *ReaderName( xml_reader_t *p_reader )
     else
         psz_name = ((XAttribute *)p_reader->p_sys->p_curattr->data)->name;
 
-    if( psz_name ) return strdup( psz_name );
-    else return 0;
+    return psz_name ? strdup( psz_name ) : NULL;
 }
 
 static char *ReaderValue( xml_reader_t *p_reader )
@@ -315,7 +322,7 @@ static char *ReaderValue( xml_reader_t *p_reader )
         return strdup( p_reader->p_sys->p_curtag->pcdata );
     }
 
-    if( !p_reader->p_sys->p_curattr ) return 0;
+    if( !p_reader->p_sys->p_curattr ) return NULL;
 
 #ifdef XTAG_DEBUG
     fprintf( stderr, "%s=%s\n", ((XAttribute *)p_reader->p_sys->p_curattr->data)->name,
@@ -324,8 +331,7 @@ static char *ReaderValue( xml_reader_t *p_reader )
 
     psz_name = ((XAttribute *)p_reader->p_sys->p_curattr->data)->value;
 
-    if( psz_name ) return strdup( psz_name );
-    else return 0;
+    return psz_name ? strdup( psz_name ) : NULL;
 }
 
 static int ReaderNextAttr( xml_reader_t *p_reader )
@@ -334,9 +340,8 @@ static int ReaderNextAttr( xml_reader_t *p_reader )
         p_reader->p_sys->p_curattr = p_reader->p_sys->p_curtag->attributes;
     else if( p_reader->p_sys->p_curattr )
         p_reader->p_sys->p_curattr = p_reader->p_sys->p_curattr->next;
- 
-    if( p_reader->p_sys->p_curattr ) return VLC_SUCCESS;
-    else return VLC_EGENERIC;
+
+    return p_reader->p_sys->p_curattr ? VLC_SUCCESS : VLC_EGENERIC;
 }
 
 /*****************************************************************************
@@ -351,10 +356,14 @@ static XList *xlist_append( XList *list, void *data )
     l->prev = l->next = NULL;
     l->data = data;
 
-    if( list == NULL ) return l;
+    if( !list )
+        return l;
 
     for( last = list; last; last = last->next )
-        if( last->next == NULL ) break;
+    {
+        if( !last->next )
+            break;
+    }
 
     if( last ) last->next = l;
     l->prev = last;
@@ -507,7 +516,11 @@ static char *xtag_slurp_quoted( XTagParser *parser )
     ret[xi] = '\0';
     parser->start = &s[xi];
 
-    if( !xtag_assert_and_pass( parser, quote ) ) return NULL;
+    if( !xtag_assert_and_pass( parser, quote ) )
+    {
+        free( ret );
+        return NULL;
+    }
 
     return ret;
 }
@@ -518,12 +531,14 @@ static XAttribute *xtag_parse_attribute( XTagParser *parser )
     char *name, *value;
     char *s;
 
-    if( !parser->valid ) return NULL;
+    if( !parser->valid )
+        return NULL;
 
     xtag_skip_whitespace( parser );
  
     name = xtag_slurp_to( parser, X_WHITESPACE|X_EQUAL, X_SLASH|X_CLOSETAG );
-    if( name == NULL ) return NULL;
+    if( !name )
+        return NULL;
 
     xtag_skip_whitespace( parser );
     s = parser->start;
@@ -747,7 +762,8 @@ static XTag *xtag_free( XTag *xtag )
     XAttribute *attr;
     XTag *child;
 
-    if( xtag == NULL ) return NULL;
+    if( !xtag )
+        return NULL;
 
     free( xtag->name );
     free( xtag->pcdata );
@@ -1052,3 +1068,4 @@ static int xtag_snprint( char *buf, int n, XTag *xtag )
 
     return written;
 }
+




More information about the vlc-devel mailing list