bug-hurd
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH] trans/hello{,-mt}: properly escape contents in trivfs_append


From: Samuel Thibault
Subject: Re: [PATCH] trans/hello{,-mt}: properly escape contents in trivfs_append_args
Date: Fri, 5 Sep 2014 00:50:45 +0200
User-agent: Mutt/1.5.21+34 (58baf7c9f32f) (2010-12-30)

Justus Winter, le Thu 04 Sep 2014 12:51:36 +0200, a écrit :
> Fixes https://savannah.gnu.org/bugs/?15806 .

Ack.

> * trans/hello-mt.c (trivfs_append_args): Escape contents.
> * trans/hello.c (trivfs_append_args): Likewise.
> ---
>  trans/hello-mt.c | 28 ++++++++++++++++++++++------
>  trans/hello.c    | 21 +++++++++++++++++++--
>  2 files changed, 41 insertions(+), 8 deletions(-)
> 
> diff --git a/trans/hello-mt.c b/trans/hello-mt.c
> index ba9329a..44d54de 100644
> --- a/trans/hello-mt.c
> +++ b/trans/hello-mt.c
> @@ -273,16 +273,32 @@ trivfs_append_args (struct trivfs_control *fsys,
>  {
>    error_t err;
>    char *opt;
> +  size_t opt_len;
> +  FILE *s;
> +  char *c;
> +
> +  s = open_memstream (&opt, &opt_len);
> +  fprintf (s, "--contents='");
>  
>    pthread_rwlock_rdlock (&contents_lock);
> -  err = asprintf (&opt, "--contents=%s", contents) < 0 ? ENOMEM : 0;
> +  for (c = contents; *c; c++)
> +    switch (*c)
> +      {
> +      case 0x27: /* Single quote.  */
> +     fprintf (s, "'\"'\"'");
> +     break;
> +
> +      default:
> +     fprintf (s, "%c", *c);
> +      }
>    pthread_rwlock_unlock (&contents_lock);
>  
> -  if (!err)
> -    {
> -      err = argz_add (argz, argz_len, opt);
> -      free (opt);
> -    }
> +  fprintf (s, "'");
> +  fclose (s);
> +
> +  err = argz_add (argz, argz_len, opt);
> +
> +  free (opt);
>  
>    return err;
>  }
> diff --git a/trans/hello.c b/trans/hello.c
> index 4e88c60..d1884df 100644
> --- a/trans/hello.c
> +++ b/trans/hello.c
> @@ -246,9 +246,26 @@ trivfs_append_args (struct trivfs_control *fsys,
>  {
>    error_t err;
>    char *opt;
> +  size_t opt_len;
> +  FILE *s;
> +  char *c;
>  
> -  if (asprintf (&opt, "--contents=%s", contents) < 0)
> -    return ENOMEM;
> +  s = open_memstream (&opt, &opt_len);
> +  fprintf (s, "--contents='");
> +
> +  for (c = contents; *c; c++)
> +    switch (*c)
> +      {
> +      case 0x27: /* Single quote.  */
> +     fprintf (s, "'\"'\"'");
> +     break;
> +
> +      default:
> +     fprintf (s, "%c", *c);
> +      }
> +
> +  fprintf (s, "'");
> +  fclose (s);
>  
>    err = argz_add (argz, argz_len, opt);
>  
> -- 
> 2.1.0
> 

-- 
Samuel
<y> le y est un animal discret se logeant facilement dans un terminal
*** c has changed the topic on channel #ens-mim to ne pas jeter de cacahuetes 
aux ys, svp
 -+- #ens-mim - n'oubliez pas le guide -+-



reply via email to

[Prev in Thread] Current Thread [Next in Thread]