Fix CID: 101 resource leak in osdmenu parser.
authorJean-Paul Saman <jpsaman@videolan.org>
Sat, 31 May 2008 12:43:14 +0000 (14:43 +0200)
committerJean-Paul Saman <jpsaman@videolan.org>
Sat, 31 May 2008 12:55:57 +0000 (14:55 +0200)
modules/misc/osd/simple.c

index 30c9bdf..059d4f0 100644 (file)
@@ -270,9 +270,15 @@ int osd_parser_simpleOpen( vlc_object_t *p_this )
                         else /* absolute paths are used. */
                             p_range_current = osd_StateNew( p_menu, &file[0], "pressed" );
 
-                        if( !p_range_current || !p_range_current->p_pic )
+                        if( !p_range_current )
                             goto error;
 
+                        if( !p_range_current->p_pic )
+                        {
+                            osd_StatesFree( p_menu, p_range_current );
+                            goto error;
+                        }
+
                         p_range_current->i_x = i_x;
                         p_range_current->i_y = i_y;
 
@@ -369,8 +375,14 @@ int osd_parser_simpleOpen( vlc_object_t *p_this )
                     else /* absolute paths are used. */
                         p_range_current = osd_StateNew( p_menu, &file[0], "pressed" );
 
-                    if( !p_range_current || !p_range_current->p_pic )
+                    if( !p_range_current )
+                        goto error;
+
+                    if( !p_range_current->p_pic )
+                    {
+                        osd_StatesFree( p_menu, p_range_current );
                         goto error;
+                    }
 
                     p_range_current->i_x = i_x;
                     p_range_current->i_y = i_y;
@@ -439,8 +451,14 @@ int osd_parser_simpleOpen( vlc_object_t *p_this )
             else /* absolute paths are used. */
                 p_state_current = osd_StateNew( p_menu, &file[0], &state[0] );
 
-            if( !p_state_current || !p_state_current->p_pic )
+            if( !p_state_current )
+                goto error;
+
+            if( !p_state_current->p_pic )
+            {
+                osd_StatesFree( p_menu, p_state_current );
                 goto error;
+            }
 
             p_state_current->i_x = i_x;
             p_state_current->i_y = i_y;