On Thu, 19 May 2016 18:57:50 +0200
Hiltjo Posthuma <hil...@codemadness.org> wrote:

> Hi peoples,
> 
> This diff makes sure to NUL-terminate argv when parsing options in libfuse.
> The upstream/other libfuse does it this way. This fixes an issue with the
> sysutils/sshfs port, it uses execvp(3) on the fuse_args argv and this gave
> an error "bad address".
> 
> 
> Index: fuse_opt.c
> ===================================================================
> RCS file: /cvs/src/lib/libfuse/fuse_opt.c,v
> retrieving revision 1.15
> diff -u -p -r1.15 fuse_opt.c
> --- fuse_opt.c        19 Oct 2015 17:24:07 -0000      1.15
> +++ fuse_opt.c        19 May 2016 16:50:39 -0000
> @@ -353,7 +353,7 @@ fuse_opt_insert_arg(struct fuse_args *ar
>       if (p < 0 || p > args->argc)
>               return (-1);
>  
> -     av = reallocarray(args->argv, args->argc + 1, sizeof(*av));
> +     av = reallocarray(args->argv, args->argc + 2, sizeof(*av));
>       if (av == NULL)
>               return (-1);
>  
> @@ -365,6 +365,7 @@ fuse_opt_insert_arg(struct fuse_args *ar
>  
>       args->argc++;
>       args->argv = av;
> +     args->argv[args->argc] = NULL;
>       for (i = p; i < args->argc; i++) {
>               next_arg = args->argv[i];
>               args->argv[i] = this_arg;
> 
> 
> [0] upstream libfuse fuse_opt_add_arg:
>     https://github.com/libfuse/libfuse/blob/master/lib/fuse_opt.c#L62
> 

This looks correct, but don't forget about free_argv() and alloc_argv().

Ray

Reply via email to