[vlc-commits] lua: fix memory and object leak and reset locale on error path

Pierre Ynard git at videolan.org
Sun May 20 03:50:28 CEST 2012


vlc | branch: master | Pierre Ynard <linkfanel at yahoo.fr> | Sun May 20 03:48:08 2012 +0200| [31b5fbdb6d43462db5de00f13e910e0d9441ce3e] | committer: Pierre Ynard

lua: fix memory and object leak and reset locale on error path

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

 modules/lua/libs/equalizer.c |   28 +++++++++++++++++-----------
 1 file changed, 17 insertions(+), 11 deletions(-)

diff --git a/modules/lua/libs/equalizer.c b/modules/lua/libs/equalizer.c
index e698c6f..2312e68 100644
--- a/modules/lua/libs/equalizer.c
+++ b/modules/lua/libs/equalizer.c
@@ -133,7 +133,7 @@ Band 9: 16 kHz
 *****************************************************************************/
 static int vlclua_equalizer_get( lua_State *L )
 {
-    int bands = 9;
+    const unsigned bands = 10;
     input_thread_t *p_input = vlclua_get_input_internal( L );
     if( !p_input )
         return 0;
@@ -142,7 +142,6 @@ static int vlclua_equalizer_get( lua_State *L )
     if( !p_aout )
         return 0;
 
-    float level = 0 ;
     char *psz_af = var_GetNonEmptyString( p_aout, "audio-filter" );
     if( !psz_af || strstr ( psz_af, "equalizer" ) == NULL )
     {
@@ -159,24 +158,31 @@ static int vlclua_equalizer_get( lua_State *L )
         vlc_object_release( p_aout );
         return 0;
     }
+
+    bool error = false;
     locale_t loc = newlocale (LC_NUMERIC_MASK, "C", NULL);
     locale_t oldloc = uselocale (loc);
-    int i = 0;
-    char *str;
     lua_newtable( L );
-    while( bands >= 0 )
+    for( unsigned i = 0; i < bands; i++ )
     {
-        level = strtof( psz_bands, &psz_bands);
-        bands--;
+        float level = strtof( psz_bands, &psz_bands );
+        char *str;
         if( asprintf( &str , "%f" , level ) == -1 )
-            return 0;
+        {
+            error = true;
+            break;
+        }
         lua_pushstring( L, str );
         free(str);
-        if( asprintf( &str , "band id=\"%d\"", i++ ) == -1 )
-            return 0;
+        if( asprintf( &str , "band id=\"%u\"", i ) == -1 )
+        {
+            error = true;
+            break;
+        }
         lua_setfield( L , -2 , str );
         free( str );
     }
+
     free( psz_bands_origin );
     if( loc != (locale_t)0 )
     {
@@ -184,7 +190,7 @@ static int vlclua_equalizer_get( lua_State *L )
         freelocale (loc);
     }
     vlc_object_release( p_aout );
-    return 1;
+    return error ? 0 : 1;
 }
 
 



More information about the vlc-commits mailing list