[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