Some patches to compile with gcc-next

Jeremy Allison jra at samba.org
Thu Nov 3 00:03:42 UTC 2016


On Thu, Nov 03, 2016 at 09:52:07AM +1300, Douglas Bagnall wrote:
> 
> The real bug is in smbclient, which I think I have fixed. There it was
> trying to overwrite a string like "stdin-<pid>" onto the considerably
> shorter string "-", but the snprintf limit was actually set to
> sizeof(char *) - 1.
> 
> ../source4/client/client.c: In function ‘cmd_print’:
> ../source4/client/client.c:1545:45: error: output truncated before the last format character [-Werror=format-length=]
>    slprintf(rname, sizeof(rname)-1, "stdin-%d", (int)getpid());
>                                      ~~~~~~~~^
> In file included from ../source4/include/includes.h:23:0,
>                  from ../source4/client/client.c:32:
> ../lib/replace/../replace/replace.h:510:18: note: format output between 8 and 18 bytes into a destination of size 7
>  #define slprintf snprintf
> ../source4/client/client.c:1545:3: note: in expansion of macro ‘slprintf’
>    slprintf(rname, sizeof(rname)-1, "stdin-%d", (int)getpid());
>    ^~~~~~~~

Yeah, that's in the smbclient4 which isn't used as a production
tool. Good catch though.

I'll take a look at PATCH 4/4 tomorrow and review !

Cheers,

Jeremy.

> From 1a0c749b20eb35ac1abdc647cb119602e4b3fb69 Mon Sep 17 00:00:00 2001
> From: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
> Date: Tue, 1 Nov 2016 13:26:11 +1300
> Subject: [PATCH 1/4] lib/replace tests: prevent GCC fretting over snprintf
>  sizes
> 
> These tests deliberately use snprintf for truncating strings, which is
> fine for tests. This has the effect of leaving the warning in place
> but preventing it from becoming a fatal error.
> 
> Signed-off-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
> ---
>  lib/replace/wscript | 7 ++++---
>  1 file changed, 4 insertions(+), 3 deletions(-)
> 
> diff --git a/lib/replace/wscript b/lib/replace/wscript
> index 1dfd902..6565b00 100644
> --- a/lib/replace/wscript
> +++ b/lib/replace/wscript
> @@ -704,9 +704,10 @@ def build(bld):
>                        deps='crypt dl nsl socket rt attr' + extra_libs)
>  
>      bld.SAMBA_SUBSYSTEM('replace-test',
> -                      source='''test/testsuite.c test/strptime.c
> -                      test/os2_delete.c test/getifaddrs.c''',
> -                      deps='replace')
> +                        source='''test/testsuite.c test/strptime.c
> +                        test/os2_delete.c test/getifaddrs.c''',
> +                        deps='replace',
> +                        cflags="-Wformat-length")
>  
>      if bld.env.standalone_replace:
>          bld.SAMBA_BINARY('replace_testsuite',
> -- 
> 2.7.4
> 
> 
> From 48f64985e83e1fe957eac98a1564135fb63ff6e0 Mon Sep 17 00:00:00 2001
> From: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
> Date: Tue, 1 Nov 2016 13:27:16 +1300
> Subject: [PATCH 2/4] vfs_shadow_copy: avoid GCC qualms over snprintf length
> 
> ---
>  source3/modules/wscript_build | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/source3/modules/wscript_build b/source3/modules/wscript_build
> index a5d8407..0d33d72 100644
> --- a/source3/modules/wscript_build
> +++ b/source3/modules/wscript_build
> @@ -132,7 +132,8 @@ bld.SAMBA3_MODULE('vfs_shadow_copy',
>                   deps='samba-util',
>                   init_function='',
>                   internal_module=bld.SAMBA3_IS_STATIC_MODULE('vfs_shadow_copy'),
> -                 enabled=bld.SAMBA3_IS_ENABLED_MODULE('vfs_shadow_copy'))
> +                 enabled=bld.SAMBA3_IS_ENABLED_MODULE('vfs_shadow_copy'),
> +                 cflags="-Wformat-length")
>  
>  bld.SAMBA3_MODULE('vfs_shadow_copy2',
>                   subsystem='vfs',
> -- 
> 2.7.4
> 
> 
> From 9929b012a171a21c7b4ac9e9bac9bf29146eee05 Mon Sep 17 00:00:00 2001
> From: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
> Date: Tue, 1 Nov 2016 13:28:56 +1300
> Subject: [PATCH 3/4] s3/message_dgm: avoid GCC qualms over snprintf length
> 
> ---
>  source3/wscript_build | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/source3/wscript_build b/source3/wscript_build
> index 22e1a62..21b19f5 100755
> --- a/source3/wscript_build
> +++ b/source3/wscript_build
> @@ -314,6 +314,7 @@ bld.SAMBA3_SUBSYSTEM('TDB_LIB',
>  bld.SAMBA3_LIBRARY('messages_dgm',
>                     source='''lib/messages_dgm.c lib/messages_dgm_ref.c''',
>                     deps='''talloc samba-debug PTHREADPOOL msghdr genrand''',
> +                   cflags="-Wformat-length",
>                     private_library=True)
>  
>  bld.SAMBA3_LIBRARY('messages_util',
> -- 
> 2.7.4
> 
> 
> From a4b7929eaa03465e42f3d9785bd5e6b34aed766a Mon Sep 17 00:00:00 2001
> From: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
> Date: Tue, 1 Nov 2016 14:18:38 +1300
> Subject: [PATCH 4/4] smbclient: fix string formatting in print command
> 
> At one time, the variables lname and rname were char arrays, but now they
> are pointers. When they were arrays, sizeof(rname) was the length of the
> array, but now it gives the size of the pointer which is not what we want.
> 
> In the case where the filename is -, rname was alloced as size 1, which
> could never fit the name it wanted to have contain ("stdin-<pid>").
> 
> Signed-off-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
> ---
>  source4/client/client.c | 18 ++++++++++--------
>  1 file changed, 10 insertions(+), 8 deletions(-)
> 
> diff --git a/source4/client/client.c b/source4/client/client.c
> index 4807123..71ec32e 100644
> --- a/source4/client/client.c
> +++ b/source4/client/client.c
> @@ -1535,14 +1535,16 @@ static int cmd_print(struct smbclient_context *ctx, const char **args)
>  
>  	lname = talloc_strdup(ctx, args[1]);
>  
> -	rname = talloc_strdup(ctx, lname);
> -	p = strrchr_m(rname,'/');
> -	if (p) {
> -		slprintf(rname, sizeof(rname)-1, "%s-%d", p+1, (int)getpid());
> -	}
> -
> -	if (strequal(lname,"-")) {
> -		slprintf(rname, sizeof(rname)-1, "stdin-%d", (int)getpid());
> +	if (strequal(lname, "-")) {
> +		rname = talloc_array(ctx, char, 20);
> +		slprintf(rname, 19, "stdin-%d", (int)getpid());
> +	} else {
> +		rname = talloc_strdup(ctx, lname);
> +		p = strrchr_m(rname, '/');
> +		if (p) {
> +			slprintf(rname, strlen(rname), "%s-%d", p+1,
> +				 (int)getpid());
> +		}
>  	}
>  
>  	return do_put(ctx, rname, lname, false);
> -- 
> 2.7.4
> 




More information about the samba-technical mailing list