Commit f8640237 authored by Pierre Ynard's avatar Pierre Ynard

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

(cherry picked from commit 31b5fbdb6d43462db5de00f13e910e0d9441ce3e)
Signed-off-by: default avatarPierre Ynard <linkfanel@yahoo.fr>
parent 6430ad04
...@@ -136,7 +136,7 @@ Band 9: 16 kHz ...@@ -136,7 +136,7 @@ Band 9: 16 kHz
*****************************************************************************/ *****************************************************************************/
static int vlclua_equalizer_get( lua_State *L ) 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 ); input_thread_t *p_input = vlclua_get_input_internal( L );
if( !p_input ) if( !p_input )
return 0; return 0;
...@@ -145,7 +145,6 @@ static int vlclua_equalizer_get( lua_State *L ) ...@@ -145,7 +145,6 @@ static int vlclua_equalizer_get( lua_State *L )
if( !p_aout ) if( !p_aout )
return 0; return 0;
float level = 0 ;
char *psz_af = var_GetNonEmptyString( p_aout, "audio-filter" ); char *psz_af = var_GetNonEmptyString( p_aout, "audio-filter" );
if( !psz_af || strstr ( psz_af, "equalizer" ) == NULL ) if( !psz_af || strstr ( psz_af, "equalizer" ) == NULL )
{ {
...@@ -162,24 +161,31 @@ static int vlclua_equalizer_get( lua_State *L ) ...@@ -162,24 +161,31 @@ static int vlclua_equalizer_get( lua_State *L )
vlc_object_release( p_aout ); vlc_object_release( p_aout );
return 0; return 0;
} }
bool error = false;
locale_t loc = newlocale (LC_NUMERIC_MASK, "C", NULL); locale_t loc = newlocale (LC_NUMERIC_MASK, "C", NULL);
locale_t oldloc = uselocale (loc); locale_t oldloc = uselocale (loc);
int i = 0;
char *str;
lua_newtable( L ); lua_newtable( L );
while( bands >= 0 ) for( unsigned i = 0; i < bands; i++ )
{ {
level = strtof( psz_bands, &psz_bands); float level = strtof( psz_bands, &psz_bands );
bands--; char *str;
if( asprintf( &str , "%f" , level ) == -1 ) if( asprintf( &str , "%f" , level ) == -1 )
return 0; {
error = true;
break;
}
lua_pushstring( L, str ); lua_pushstring( L, str );
free(str); free(str);
if( asprintf( &str , "band id=\"%d\"", i++ ) == -1 ) if( asprintf( &str , "band id=\"%u\"", i ) == -1 )
return 0; {
error = true;
break;
}
lua_setfield( L , -2 , str ); lua_setfield( L , -2 , str );
free( str ); free( str );
} }
free( psz_bands_origin ); free( psz_bands_origin );
if( loc != (locale_t)0 ) if( loc != (locale_t)0 )
{ {
...@@ -187,7 +193,7 @@ static int vlclua_equalizer_get( lua_State *L ) ...@@ -187,7 +193,7 @@ static int vlclua_equalizer_get( lua_State *L )
freelocale (loc); freelocale (loc);
} }
vlc_object_release( p_aout ); vlc_object_release( p_aout );
return 1; return error ? 0 : 1;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment