From bca37187e25478ac893fbd29e2f48943fc4ecf38 Mon Sep 17 00:00:00 2001 From: =?utf8?q?R=C3=A9mi=20Duraffort?= Date: Mon, 5 Apr 2010 22:35:55 +0200 Subject: [PATCH] Lua: escape the lua modules names (fix #3492) --- modules/misc/lua/vlc.c | 40 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/modules/misc/lua/vlc.c b/modules/misc/lua/vlc.c index de9f883aaf..e3e2415fab 100644 --- a/modules/misc/lua/vlc.c +++ b/modules/misc/lua/vlc.c @@ -582,6 +582,37 @@ int __vlclua_playlist_add_internal( vlc_object_t *p_this, lua_State *L, return i_count; } +static char *escape( const char *psz ) +{ + if( !psz ) + return NULL; + + /* Count the number of ' and \ in the string */ + const char *it = psz; + int i_esc = 0; + while( *it != '\0') + { + if( *it == '\'' || *it == '\\' ) + i_esc++; + it++; + } + + if( i_esc == 0 ) + return strdup( psz ); + + char *psz_esc = malloc( strlen( psz ) + i_esc + 1 ); + char *it2 = psz_esc; + it = psz; + while( *it != '\0' ) + { + if( *it == '\'' || *it == '\\' ) + *it2++ = '\\'; + *it2++ = *it++; + } + *it2 = '\0'; + + return psz_esc; +} static int vlc_sd_probe_Open( vlc_object_t *obj ) { vlc_probe_t *probe = (vlc_probe_t *)obj; @@ -665,13 +696,20 @@ static int vlc_sd_probe_Open( vlc_object_t *obj ) goto error; } } + + char *psz_file_esc = escape( *ppsz_file ); + char *psz_longname_esc = escape( psz_longname ); if( asprintf( &psz_name, "lua{sd='%s',longname='%s'}", - *ppsz_file, psz_longname ) < 0 ) + psz_file_esc, psz_longname_esc ) < 0 ) { + free( psz_file_esc ); + free( psz_longname_esc ); free( psz_filename ); free( psz_longname ); goto error; } + free( psz_file_esc ); + free( psz_longname_esc ); vlc_sd_probe_Add( probe, psz_name, psz_longname, SD_CAT_INTERNET ); free( psz_name ); free( psz_longname ); -- 2.39.2