[vlc-devel] [PATCH] Fix Hurd build

Samuel Thibault samuel.thibault at ens-lyon.org
Sun May 1 09:53:08 CEST 2016


Ping?

Samuel Thibault, on Wed 27 Apr 2016 13:47:13 +0200, wrote:
> Denis Charmet, on Wed 27 Apr 2016 13:35:47 +0200, wrote:
> > On 2016-04-27 13:21, Samuel Thibault wrote:
> > >Denis Charmet, on Wed 27 Apr 2016 12:10:54 +0200, wrote:
> > >>On 2016-04-26 21:14, Samuel Thibault wrote:
> > >>>Rémi Denis-Courmont, on Tue 26 Apr 2016 22:12:04 +0300, wrote:
> > >>>>I mean the following sprintf(). Maybe there was a nonobvious way to
> > >>>>prevent
> > >>>>overflow, but I don´t see it.
> > >>>
> > >>>Ok. The "idea" behind PATH_MAX is that it's supposed to be the maximum
> > >>>size you'd want to pass with prefix and filename. But yes, that won't
> > >>>prevent anybody from actually passing bigger filenames, and so the
> > >>>second patch I sent, which uses malloc, just avoids the issue
> > >>>altogether.
> > >>
> > >>I think the point of Rémi was: use snprintf and not sprintf regardless
> > >>of
> > >>your memory zone of allocation.
> > >
> > >Then this?
> > 
> > Nope let the stack buffer with snprintf
> 
> Ok, then back to this?
> 
> From aac67ee41cd77b6fab6c914e272e1cb84c32c648 Mon Sep 17 00:00:00 2001
> From: Samuel Thibault <samuel.thibault at ens-lyon.org>
> Date: Tue, 26 Apr 2016 18:22:41 +0000
> Subject: [PATCH] Fix hurd build
> 
> theme_loader.cpp contains an unconditional use of PATH_MAX,
> which is not defined on GNU/Hurd to avoid imposing build-time
> limits. This change replaces its use with dynamic allocation of the
> required size.
> ---
>  modules/gui/skins2/src/theme_loader.cpp | 6 ++++--
>  1 file changed, 4 insertions(+), 2 deletions(-)
> 
> diff --git a/modules/gui/skins2/src/theme_loader.cpp b/modules/gui/skins2/src/theme_loader.cpp
> index 1ec1dfc..b4cf7e8 100644
> --- a/modules/gui/skins2/src/theme_loader.cpp
> +++ b/modules/gui/skins2/src/theme_loader.cpp
> @@ -549,7 +549,9 @@ int tar_extract_all( TAR *t, char *prefix )
>      union tar_buffer buffer;
>      int   len, err, getheader = 1, remaining = 0;
>      FILE  *outfile = NULL;
> -    char  fname[BLOCKSIZE + PATH_MAX];
> +    long  path_max = pathconf (".", _PC_PATH_MAX);
> +    size_t maxsize = (path_max == -1 || path_max > 4096) ? 4096 : path_max;
> +    char  fname[BLOCKSIZE + maxsize];
>  
>      while( 1 )
>      {
> @@ -583,7 +585,7 @@ int tar_extract_all( TAR *t, char *prefix )
>                  break;
>              }
>  
> -            sprintf( fname, "%s/%s", prefix, buffer.header.name );
> +            snprintf( fname, sizeof(fname), "%s/%s", prefix, buffer.header.name );
>  
>              /* Check magic value in header */
>              if( strncmp( buffer.header.magic, "GNUtar", 6 ) &&
> -- 
> 2.6.4
> 

-- 
Samuel
<c> xlnt comme sujet de stage je peux essayer de donner une description formelle de automake
 -+- #ens-mim -+-


More information about the vlc-devel mailing list