[vlc-devel] [PATCH 01/12] config: chain: Don't use VLA
Rémi Denis-Courmont
remi at remlab.net
Tue Dec 8 16:05:38 CET 2020
Hi,
This adds a failure case for no reasons. There are no issues here since the VLA length is bound at run-time.
-1
Le 8 décembre 2020 16:19:05 GMT+02:00, "Hugo Beauzée-Luyssen" <hugo at beauzee.fr> a écrit :
>---
> src/config/chain.c | 25 ++++++++++++++++++-------
> 1 file changed, 18 insertions(+), 7 deletions(-)
>
>diff --git a/src/config/chain.c b/src/config/chain.c
>index 514a571ab7..6f26b7b4e0 100644
>--- a/src/config/chain.c
>+++ b/src/config/chain.c
>@@ -271,7 +271,6 @@ void config_ChainParse( vlc_object_t *p_this, const
>char *psz_prefix,
> const char *const *ppsz_options, const config_chain_t *cfg )
> {
> if( psz_prefix == NULL ) psz_prefix = "";
>- size_t plen = 1 + strlen( psz_prefix );
>
> /* First, var_Create all variables */
> for( size_t i = 0; ppsz_options[i] != NULL; i++ )
>@@ -280,11 +279,15 @@ void config_ChainParse( vlc_object_t *p_this,
>const char *psz_prefix,
> if (optname[0] == '*')
> optname++;
>
>- char name[plen + strlen( optname )];
>- snprintf( name, sizeof (name), "%s%s", psz_prefix, optname );
>+ char* name;
>+ if( asprintf(&name, "%s%s", psz_prefix, optname) < 0 )
>+ return;
> if( var_Create( p_this, name,
> config_GetType( name ) | VLC_VAR_DOINHERIT ) )
>+ {
>+ free(name);
> return /* VLC_xxx */;
>+ }
>
> module_config_t* p_conf = config_FindConfig( name );
> if( p_conf )
>@@ -303,6 +306,7 @@ void config_ChainParse( vlc_object_t *p_this, const
>char *psz_prefix,
> break;
> }
> }
>+ free(name);
> }
>
> /* Now parse options and set value */
>@@ -349,10 +353,11 @@ void config_ChainParse( vlc_object_t *p_this,
>const char *psz_prefix,
> }
>
> /* create name */
>- char name[plen + strlen( ppsz_options[i] )];
>- const char *psz_name = name;
>- snprintf( name, sizeof (name), "%s%s", psz_prefix,
>- b_once ? (ppsz_options[i] + 1) : ppsz_options[i] );
>+ char *name;
>+ if (asprintf(&name, "%s%s", psz_prefix,
>+ b_once ? (ppsz_options[i] + 1) : ppsz_options[i])
>< 0)
>+ continue;
>+ const char* psz_name = name;
>
> /* Check if the option is deprecated */
> p_conf = config_FindConfig( name );
>@@ -368,6 +373,7 @@ void config_ChainParse( vlc_object_t *p_this, const
>char *psz_prefix,
> /* TODO: this should return an error and end option parsing
> * ... but doing this would change the VLC API and all the
> * modules so i'll do it later */
>+ free(name);
> continue;
> }
> }
>@@ -379,17 +385,20 @@ void config_ChainParse( vlc_object_t *p_this,
>const char *psz_prefix,
> {
> msg_Warn( p_this, "unknown option %s (value=%s)",
> cfg->psz_name, cfg->psz_value );
>+ free(name);
> continue;
> }
>
> if( i_type != VLC_VAR_BOOL && cfg->psz_value == NULL )
> {
> msg_Warn( p_this, "missing value for option %s", cfg->psz_name );
>+ free(name);
> continue;
> }
> if( i_type != VLC_VAR_STRING && b_once )
> {
> msg_Warn( p_this, "*option_name need to be a string option" );
>+ free(name);
> continue;
> }
>
>@@ -422,6 +431,7 @@ void config_ChainParse( vlc_object_t *p_this, const
>char *psz_prefix,
> {
> free( val2.psz_string );
>msg_Dbg( p_this, "ignoring option %s (not first occurrence)", psz_name
>);
>+ free(name);
> continue;
> }
> free( val2.psz_string );
>@@ -429,6 +439,7 @@ void config_ChainParse( vlc_object_t *p_this, const
>char *psz_prefix,
> var_Set( p_this, psz_name, val );
> msg_Dbg( p_this, "set config option: %s to %s", psz_name,
> cfg->psz_value ? cfg->psz_value : "(null)" );
>+ free(name);
> }
> }
>
>--
>2.29.2
>
>_______________________________________________
>vlc-devel mailing list
>To unsubscribe or modify your subscription options:
>https://mailman.videolan.org/listinfo/vlc-devel
--
Envoyé de mon appareil Android avec Courriel K-9 Mail. Veuillez excuser ma brièveté.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.videolan.org/pipermail/vlc-devel/attachments/20201208/c185628c/attachment.html>
More information about the vlc-devel
mailing list