[PATCH v4 07/15] tests: fix warn unused result on asprintf calls

Frederic Berat fberat@redhat.com
Wed May 31 14:36:41 GMT 2023


On Thu, May 25, 2023 at 3:07 AM Siddhesh Poyarekar <siddhesh@gotplt.org> wrote:
>
> On 2023-04-28 08:21, Frédéric Bérat wrote:
> > When enabling _FORTIFY_SOURCE, some functions now lead to warnings when
> > their result is not checked.
> > ---
> >   argp/argp-test.c           |  8 +++++---
> >   posix/tst-execl2.c         |  8 ++------
> >   posix/tst-execle2.c        |  8 ++------
> >   posix/tst-execlp2.c        | 11 +++--------
> >   posix/tst-execv2.c         |  8 ++------
> >   posix/tst-execve2.c        |  8 ++------
> >   posix/tst-execvp2.c        | 17 ++++-------------
> >   stdio-common/bug5.c        |  4 +++-
> >   stdio-common/test-fwrite.c |  4 +++-
> >   stdio-common/tst-fseek.c   |  5 ++---
> >   10 files changed, 28 insertions(+), 53 deletions(-)
> >
> > diff --git a/argp/argp-test.c b/argp/argp-test.c
> > index c7e20f6235..cd69c81b1a 100644
> > --- a/argp/argp-test.c
> > +++ b/argp/argp-test.c
> > @@ -25,6 +25,8 @@
> >   #include <string.h>
> >   #include <argp.h>
> >
> > +#include <support/support.h>
> > +
> >   const char *argp_program_version = "argp-test 1.0";
> >
> >   struct argp_option sub_options[] =
> > @@ -178,12 +180,12 @@ help_filter (int key, const char *text, void *input)
> >     if (key == ARGP_KEY_HELP_POST_DOC && text)
> >       {
> >         time_t now = time (0);
> > -      asprintf (&new_text, text, ctime (&now));
> > +      new_text = xasprintf (text, ctime (&now));
> >       }
> >     else if (key == 'f')
> >       /* Show the default for the --foonly option.  */
> > -    asprintf (&new_text, "%s (ZOT defaults to %x)",
> > -           text, params->foonly_default);
> > +    new_text = xasprintf ("%s (ZOT defaults to %x)",
> > +                       text, params->foonly_default);
> >     else
> >       new_text = (char *)text;
> >
> > diff --git a/posix/tst-execl2.c b/posix/tst-execl2.c
> > index 5b74959ef8..d2f4453ad8 100644
> > --- a/posix/tst-execl2.c
> > +++ b/posix/tst-execl2.c
> > @@ -18,12 +18,8 @@ prepare (int argc, char *argv[])
> >   {
> >     char *buf;
> >     int off;
> > -  asprintf (&buf, "cp %s %n%s-copy", argv[0], &off, argv[0]);
> > -  if (buf == NULL)
> > -    {
> > -      puts ("asprintf  failed");
> > -      exit (1);
> > -    }
> > +
> > +  buf = xasprintf ("cp %s %n%s-copy", argv[0], &off, argv[0]);
> >     if (system (buf) != 0)
> >       {
> >         puts ("system  failed");
> > diff --git a/posix/tst-execle2.c b/posix/tst-execle2.c
> > index 0430b7b573..8e3ad9acb6 100644
> > --- a/posix/tst-execle2.c
> > +++ b/posix/tst-execle2.c
> > @@ -18,12 +18,8 @@ prepare (int argc, char *argv[])
> >   {
> >     char *buf;
> >     int off;
> > -  asprintf (&buf, "cp %s %n%s-copy", argv[0], &off, argv[0]);
> > -  if (buf == NULL)
> > -    {
> > -      puts ("asprintf  failed");
> > -      exit (1);
> > -    }
> > +
> > +  buf = xasprintf ("cp %s %n%s-copy", argv[0], &off, argv[0]);
> >     if (system (buf) != 0)
> >       {
> >         puts ("system  failed");
> > diff --git a/posix/tst-execlp2.c b/posix/tst-execlp2.c
> > index 81a723dda4..8f10d4b7f8 100644
> > --- a/posix/tst-execlp2.c
> > +++ b/posix/tst-execlp2.c
> > @@ -22,12 +22,8 @@ prepare (int argc, char *argv[])
> >   {
> >     char *buf;
> >     int off;
> > -  asprintf (&buf, "cp %s %n%s-copy", argv[0], &off, argv[0]);
> > -  if (buf == NULL)
> > -    {
> > -      puts ("asprintf  failed");
> > -      exit (1);
> > -    }
> > +
> > +  buf = xasprintf ("cp %s %n%s-copy", argv[0], &off, argv[0]);
> >     if (system (buf) != 0)
> >       {
> >         puts ("system  failed");
> > @@ -59,8 +55,7 @@ do_test (void)
> >         return 1;
> >       }
> >     char *path;
> > -  asprintf (&path, "%s:../libio:../elf", bindir);
> > -  if (path == NULL)
> > +  if (asprintf (&path, "%s:../libio:../elf", bindir) < 0 || path == NULL)
>
> Couldn't this be:
>
>    path = xasprintf (...);
>    TEST_VERIFY (path != NULL);
>
> Also this is an old style test that uses test-skeleton.c, it needs to be
> ported over to using support.h.  That's probably true for other tests
> you're touching too (sorry!)
>

Although I agree the test needs porting, I'd prefer to keep the scope
of the change focused on the wur fix if you don´t mind.
The porting may be done in a separate patchset.

> >       {
> >         puts ("asprintf  failed");
> >         return 1;
> > diff --git a/posix/tst-execv2.c b/posix/tst-execv2.c
> > index a5168a269c..5fd6c46c1f 100644
> > --- a/posix/tst-execv2.c
> > +++ b/posix/tst-execv2.c
> > @@ -18,12 +18,8 @@ prepare (int argc, char *argv[])
> >   {
> >     char *buf;
> >     int off;
> > -  asprintf (&buf, "cp %s %n%s-copy", argv[0], &off, argv[0]);
> > -  if (buf == NULL)
> > -    {
> > -      puts ("asprintf  failed");
> > -      exit (1);
> > -    }
> > +
> > +  buf = xasprintf ("cp %s %n%s-copy", argv[0], &off, argv[0]);
> >     if (system (buf) != 0)
> >       {
> >         puts ("system  failed");
> > diff --git a/posix/tst-execve2.c b/posix/tst-execve2.c
> > index 1a804e94fd..e0a7c84346 100644
> > --- a/posix/tst-execve2.c
> > +++ b/posix/tst-execve2.c
> > @@ -18,12 +18,8 @@ prepare (int argc, char *argv[])
> >   {
> >     char *buf;
> >     int off;
> > -  asprintf (&buf, "cp %s %n%s-copy", argv[0], &off, argv[0]);
> > -  if (buf == NULL)
> > -    {
> > -      puts ("asprintf  failed");
> > -      exit (1);
> > -    }
> > +
> > +  buf = xasprintf ("cp %s %n%s-copy", argv[0], &off, argv[0]);
> >     if (system (buf) != 0)
> >       {
> >         puts ("system  failed");
> > diff --git a/posix/tst-execvp2.c b/posix/tst-execvp2.c
> > index 440dfab438..f6c0cb4d98 100644
> > --- a/posix/tst-execvp2.c
> > +++ b/posix/tst-execvp2.c
> > @@ -25,12 +25,8 @@ prepare (int argc, char *argv[])
> >   {
> >     char *buf;
> >     int off;
> > -  asprintf (&buf, "cp %s %n%s-copy", argv[0], &off, argv[0]);
> > -  if (buf == NULL)
> > -    {
> > -      puts ("asprintf  failed");
> > -      exit (1);
> > -    }
> > +
> > +  buf = xasprintf ("cp %s %n%s-copy", argv[0], &off, argv[0]);
> >     if (system (buf) != 0)
> >       {
> >         puts ("system  failed");
> > @@ -61,13 +57,8 @@ do_test (void)
> >         puts ("canonicalize_file_name failed");
> >         return 1;
> >       }
> > -  char *path;
> > -  asprintf (&path, "%s:../libio:../elf", bindir);
> > -  if (path == NULL)
> > -    {
> > -      puts ("asprintf  failed");
> > -      return 1;
> > -    }
> > +
> > +  char *path = xasprintf ("%s:../libio:../elf", bindir);
> >
> >     setenv ("PATH", path, 1);
> >
> > diff --git a/stdio-common/bug5.c b/stdio-common/bug5.c
> > index 7bfe9b2b8d..dfa19aed55 100644
> > --- a/stdio-common/bug5.c
> > +++ b/stdio-common/bug5.c
> > @@ -7,6 +7,8 @@
> >   #include <stdlib.h>
> >   #include <unistd.h>
> >
> > +#include <support/support.h>
> > +
> >   static char buf[8192];
> >
> >   int
> > @@ -60,7 +62,7 @@ main (void)
> >        the perhaps incompatible new shared libraries.  */
> >     unsetenv ("LD_LIBRARY_PATH");
> >
> > -  asprintf (&printbuf, "cmp %s %s", inname, outname);
> > +  printbuf = xasprintf ("cmp %s %s", inname, outname);
> >     result = system (printbuf);
> >     remove (inname);
> >     remove (outname);
> > diff --git a/stdio-common/test-fwrite.c b/stdio-common/test-fwrite.c
> > index 5677c6da80..7f383921ca 100644
> > --- a/stdio-common/test-fwrite.c
> > +++ b/stdio-common/test-fwrite.c
> > @@ -1,6 +1,8 @@
> >   #include <stdio.h>
> >   #include <string.h>
> >
> > +#include <support/support.h>
> > +
> >   static int
> >   do_test (void)
> >   {
> > @@ -57,7 +59,7 @@ do_test (void)
> >         return 1;
> >       }
> >
> > -  asprintf (&line, "\
> > +  line = xasprintf ("\
> >   GDB is free software and you are welcome to distribute copies of it\n\
> >    under certain conditions; type \"show copying\" to see the conditions.\n\
> >   There is absolutely no warranty for GDB; type \"show warranty\" for details.\n\
> > diff --git a/stdio-common/tst-fseek.c b/stdio-common/tst-fseek.c
> > index c4ac17cdf4..386dd1dd51 100644
> > --- a/stdio-common/tst-fseek.c
> > +++ b/stdio-common/tst-fseek.c
> > @@ -25,6 +25,7 @@
> >   #include <time.h>
> >   #include <sys/stat.h>
> >
> > +#include <support/support.h>
> >
> >   static int
> >   do_test (void)
> > @@ -44,9 +45,7 @@ do_test (void)
> >     if (tmpdir == NULL || tmpdir[0] == '\0')
> >       tmpdir = "/tmp";
> >
> > -  asprintf (&fname, "%s/tst-fseek.XXXXXX", tmpdir);
> > -  if (fname == NULL)
> > -    error (EXIT_FAILURE, errno, "cannot generate name for temporary file");
> > +  fname = xasprintf ("%s/tst-fseek.XXXXXX", tmpdir);
> >
> >     /* Create a temporary file.   */
> >     fd = mkstemp (fname);
>



More information about the Libc-alpha mailing list