public inbox for libc-alpha@sourceware.org
 help / color / mirror / Atom feed
From: Siddhesh Poyarekar <siddhesh@gotplt.org>
To: "Frédéric Bérat" <fberat@redhat.com>, libc-alpha@sourceware.org
Cc: "joseph@codesourcery.com" <joseph@codesourcery.com>
Subject: Re: [PATCH v7 4/4] tests: replace fgets by xfgets
Date: Tue, 13 Jun 2023 08:23:12 -0400	[thread overview]
Message-ID: <60698ba8-3981-480e-1171-6f93e10b7251@gotplt.org> (raw)
In-Reply-To: <20230612151821.199003-5-fberat@redhat.com>



On 2023-06-12 11:18, Frédéric Bérat wrote:
> With fortification enabled, fgets calls return result needs to be checked,
> has it gets the __wur macro enabled.
> ---
> Changes since v6:
>   - Fixed support/Makefile ordering
>   - Fixed header copyright date
> 
>   assert/test-assert-perr.c     |  8 +++++---
>   assert/test-assert.c          |  8 +++++---
>   stdio-common/test_rdwr.c      | 11 ++++-------
>   support/Makefile              |  1 +
>   support/xfgets.c              | 32 ++++++++++++++++++++++++++++++++
>   support/xstdio.h              |  1 +
>   sysdeps/pthread/tst-cancel6.c |  3 ++-
>   7 files changed, 50 insertions(+), 14 deletions(-)
>   create mode 100644 support/xfgets.c
> 
> diff --git a/assert/test-assert-perr.c b/assert/test-assert-perr.c
> index 8496db6ffd..09a4fcb6ef 100644
> --- a/assert/test-assert-perr.c
> +++ b/assert/test-assert-perr.c
> @@ -11,6 +11,8 @@
>   #include <string.h>
>   #include <setjmp.h>
>   
> +#include <support/xstdio.h>
> +
>   jmp_buf rec;
>   char buf[160];
>   
> @@ -70,15 +72,15 @@ main(void)
>       failed = 1; /* should not happen */
>   
>     rewind (stderr);
> -  fgets (buf, 160, stderr);
> +  xfgets (buf, 160, stderr);

Joseph, would you apply the same rationale for these tests too, i.e. 
since the test involves interaction with stdio and signals, would you 
avoid adding an xstdio abstraction here to test stdio directly?

Likewise for the stdio-common test here and in patch 3/4, what do you think?

Thanks,
Sid

>     if (!strstr(buf, strerror (1)))
>       failed = 1;
>   
> -  fgets (buf, 160, stderr);
> +  xfgets (buf, 160, stderr);
>     if (strstr (buf, strerror (0)))
>       failed = 1;
>   
> -  fgets (buf, 160, stderr);
> +  xfgets (buf, 160, stderr);
>     if (strstr (buf, strerror (2)))
>       failed = 1;
>   
> diff --git a/assert/test-assert.c b/assert/test-assert.c
> index 26b58d4dd3..25e264543b 100644
> --- a/assert/test-assert.c
> +++ b/assert/test-assert.c
> @@ -11,6 +11,8 @@
>   #include <string.h>
>   #include <setjmp.h>
>   
> +#include <support/xstdio.h>
> +
>   jmp_buf rec;
>   char buf[160];
>   
> @@ -72,15 +74,15 @@ main (void)
>       failed = 1; /* should not happen */
>   
>     rewind (stderr);
> -  fgets (buf, 160, stderr);
> +  xfgets (buf, 160, stderr);
>     if (!strstr (buf, "1 == 2"))
>       failed = 1;
>   
> -  fgets (buf, 160, stderr);
> +  xfgets (buf, 160, stderr);
>     if (strstr (buf, "1 == 1"))
>       failed = 1;
>   
> -  fgets (buf, 160, stderr);
> +  xfgets (buf, 160, stderr);
>     if (strstr (buf, "2 == 3"))
>       failed = 1;
>   
> diff --git a/stdio-common/test_rdwr.c b/stdio-common/test_rdwr.c
> index 7825ca9358..0544916eb1 100644
> --- a/stdio-common/test_rdwr.c
> +++ b/stdio-common/test_rdwr.c
> @@ -20,6 +20,7 @@
>   #include <stdlib.h>
>   #include <string.h>
>   
> +#include <support/xstdio.h>
>   
>   int
>   main (int argc, char **argv)
> @@ -49,7 +50,7 @@ main (int argc, char **argv)
>   
>     (void) fputs (hello, f);
>     rewind (f);
> -  (void) fgets (buf, sizeof (buf), f);
> +  xfgets (buf, sizeof (buf), f);
>     rewind (f);
>     (void) fputs (buf, f);
>     rewind (f);
> @@ -104,12 +105,8 @@ main (int argc, char **argv)
>     if (!lose)
>       {
>         rewind (f);
> -      if (fgets (buf, sizeof (buf), f) == NULL)
> -	{
> -	  printf ("fgets got %s.\n", strerror(errno));
> -	  lose = 1;
> -	}
> -      else if (strcmp (buf, replace))
> +      xfgets (buf, sizeof (buf), f);
> +      if (strcmp (buf, replace))
>   	{
>   	  printf ("Read \"%s\" instead of \"%s\".\n", buf, replace);
>   	  lose = 1;
> diff --git a/support/Makefile b/support/Makefile
> index 994639a915..c81e3c928c 100644
> --- a/support/Makefile
> +++ b/support/Makefile
> @@ -123,6 +123,7 @@ libsupport-routines = \
>     xdup2 \
>     xfchmod \
>     xfclose \
> +  xfgets \
>     xfopen \
>     xfork \
>     xfread \
> diff --git a/support/xfgets.c b/support/xfgets.c
> new file mode 100644
> index 0000000000..14f98dee1b
> --- /dev/null
> +++ b/support/xfgets.c
> @@ -0,0 +1,32 @@
> +/* fgets with error checking.
> +   Copyright (C) 2023 Free Software Foundation, Inc.
> +   This file is part of the GNU C Library.
> +
> +   The GNU C Library is free software; you can redistribute it and/or
> +   modify it under the terms of the GNU Lesser General Public
> +   License as published by the Free Software Foundation; either
> +   version 2.1 of the License, or (at your option) any later version.
> +
> +   The GNU C Library is distributed in the hope that it will be useful,
> +   but WITHOUT ANY WARRANTY; without even the implied warranty of
> +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> +   Lesser General Public License for more details.
> +
> +   You should have received a copy of the GNU Lesser General Public
> +   License along with the GNU C Library; if not, see
> +   <https://www.gnu.org/licenses/>.  */
> +
> +#include <support/xstdio.h>
> +
> +#include <support/check.h>
> +#include <stdlib.h>
> +
> +char *
> +xfgets (char *s, int size, FILE *stream)
> +{
> +  char *ret = fgets (s, size, stream);
> +  if (!ret && ferror(stream))
> +    FAIL_EXIT1 ("fgets failed: %m");
> +
> +  return ret;
> +}
> diff --git a/support/xstdio.h b/support/xstdio.h
> index 633c342c82..f30bee6a20 100644
> --- a/support/xstdio.h
> +++ b/support/xstdio.h
> @@ -28,6 +28,7 @@ FILE *xfopen (const char *path, const char *mode);
>   void xfclose (FILE *);
>   FILE *xfreopen (const char *path, const char *mode, FILE *stream);
>   void xfread (void *ptr, size_t size, size_t nmemb, FILE *stream);
> +char *xfgets (char *s, int size, FILE *stream);
>   
>   /* Read a line from FP, using getline.  *BUFFER must be NULL, or a
>      heap-allocated pointer of *LENGTH bytes.  Return the number of
> diff --git a/sysdeps/pthread/tst-cancel6.c b/sysdeps/pthread/tst-cancel6.c
> index 63e6d49707..49b7399353 100644
> --- a/sysdeps/pthread/tst-cancel6.c
> +++ b/sysdeps/pthread/tst-cancel6.c
> @@ -20,12 +20,13 @@
>   #include <stdlib.h>
>   #include <unistd.h>
>   
> +#include <support/xstdio.h>
>   
>   static void *
>   tf (void *arg)
>   {
>     char buf[100];
> -  fgets (buf, sizeof (buf), arg);
> +  xfgets (buf, sizeof (buf), arg);
>     /* This call should never return.  */
>     return NULL;
>   }

  reply	other threads:[~2023-06-13 12:23 UTC|newest]

Thread overview: 109+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-04-18 12:11 [PATCH 0/8] Fix warn unused result Frédéric Bérat
2023-04-18 12:11 ` [PATCH 1/8] tests: fix " Frédéric Bérat
2023-04-18 12:23   ` Siddhesh Poyarekar
2023-04-28 12:21   ` [PATCH v4 07/15] tests: fix warn unused result on asprintf calls Frédéric Bérat
2023-05-25  1:07     ` Siddhesh Poyarekar
2023-05-31 14:36       ` Frederic Berat
2023-04-28 12:21   ` [PATCH v4 08/15] tests: replace write by xwrite Frédéric Bérat
2023-05-25  1:16     ` Siddhesh Poyarekar
2023-06-01 16:39       ` Siddhesh Poyarekar
2023-04-28 12:21   ` [PATCH v4 09/15] tests: replace read by xread Frédéric Bérat
2023-04-28 12:21   ` [PATCH v4 10/15] tests: replace system by xsystem Frédéric Bérat
2023-05-25  1:22     ` Siddhesh Poyarekar
2023-04-28 12:21   ` [PATCH v4 11/15] tests: replace fread by xfread Frédéric Bérat
2023-04-28 12:21   ` [PATCH v4 12/15] tests: replace ftruncate by xftruncate Frédéric Bérat
2023-05-25  1:25     ` Siddhesh Poyarekar
2023-06-01 16:42       ` Siddhesh Poyarekar
2023-04-28 12:21   ` [PATCH v4 13/15] tests: replace fgets by xfgets Frédéric Bérat
2023-04-28 12:21   ` [PATCH v4 14/15] tests: Replace various function calls with their x variant Frédéric Bérat
2023-05-25  1:29     ` Siddhesh Poyarekar
2023-05-25 16:10       ` Frederic Berat
2023-04-28 12:21   ` [PATCH v4 15/15] tests: fix warn unused results Frédéric Bérat
2023-05-25  1:35     ` Siddhesh Poyarekar
2023-06-01 14:27   ` [PATCH v5 04/12] tests: fix warn unused result on asprintf calls Frédéric Bérat
2023-06-01 16:52     ` Siddhesh Poyarekar
2023-06-01 14:27   ` [PATCH v5 07/12] tests: replace system by xsystem Frédéric Bérat
2023-06-01 16:56     ` Siddhesh Poyarekar
2023-06-01 14:27   ` [PATCH v5 12/12] tests: fix warn unused results Frédéric Bérat
2023-06-01 16:57     ` Siddhesh Poyarekar
2023-04-18 12:11 ` [PATCH 2/8] catgets/gencat.c: fix warn unused result Frédéric Bérat
2023-04-18 12:36   ` Siddhesh Poyarekar
2023-04-28 12:21   ` [PATCH v4 01/15] " Frédéric Bérat
2023-05-24 22:47     ` Siddhesh Poyarekar
2023-06-01 14:27   ` [PATCH v5 01/12] " Frédéric Bérat
2023-06-01 16:47     ` Siddhesh Poyarekar
2023-04-18 12:11 ` [PATCH 3/8] inet/rcmd.c: " Frédéric Bérat
2023-04-18 12:37   ` Siddhesh Poyarekar
2023-04-18 13:40   ` Andreas Schwab
2023-04-18 13:50     ` Siddhesh Poyarekar
2023-04-18 12:11 ` [PATCH 4/8] locale/programs/locarchive.c: " Frédéric Bérat
2023-04-18 12:43   ` Siddhesh Poyarekar
2023-04-28 12:21   ` [PATCH v4 02/15] " Frédéric Bérat
2023-05-24 22:49     ` Siddhesh Poyarekar
2023-06-01 14:27   ` [PATCH v5 02/12] malloc/{memusage.c,memusagestat.c}: " Frédéric Bérat
2023-06-01 16:49     ` Siddhesh Poyarekar
2023-04-18 12:11 ` [PATCH 5/8] " Frédéric Bérat
2023-04-18 12:47   ` [PATCH 5/8] malloc/{memusage.c, memusagestat.c}: " Siddhesh Poyarekar
2023-04-28 12:21   ` [PATCH v4 03/15] malloc/{memusage.c,memusagestat.c}: " Frédéric Bérat
2023-05-25  0:50     ` Siddhesh Poyarekar
2023-06-01 15:55       ` [PATCH] Move {read,write}_all functions to a dedicated header Frédéric Bérat
2023-06-01 17:07         ` Siddhesh Poyarekar
2023-06-02  6:10           ` Frederic Berat
2023-06-02 10:01             ` Siddhesh Poyarekar
2023-04-18 12:11 ` [PATCH 6/8] nptl_db/thread_dbP.h: fix warn unused result Frédéric Bérat
2023-04-18 12:49   ` Siddhesh Poyarekar
2023-04-18 12:51     ` Siddhesh Poyarekar
2023-04-28 12:21   ` [PATCH v4 04/15] " Frédéric Bérat
2023-05-25  0:51     ` Siddhesh Poyarekar
2023-05-25  1:52       ` Siddhesh Poyarekar
2023-06-01 14:27   ` [PATCH v5 03/12] " Frédéric Bérat
2023-06-01 16:49     ` Siddhesh Poyarekar
2023-04-18 12:11 ` [PATCH 7/8] sunrpc/netname.c: " Frédéric Bérat
2023-04-18 12:51   ` Siddhesh Poyarekar
2023-04-28 12:21   ` [PATCH v4 05/15] " Frédéric Bérat
2023-05-25  0:53     ` Siddhesh Poyarekar
2023-04-18 12:11 ` [PATCH 8/8] sysdeps/pthread/eintr.c: " Frédéric Bérat
2023-04-18 12:54   ` Siddhesh Poyarekar
2023-04-28 12:21   ` [PATCH v4 06/15] " Frédéric Bérat
2023-05-25  0:59     ` Siddhesh Poyarekar
2023-04-28 12:21 ` [PATCH v4 00/15] Fix " Frédéric Bérat
2023-05-25  1:53   ` Siddhesh Poyarekar
2023-06-02 15:28 ` [PATCH v6 0/7] " Frédéric Bérat
2023-06-02 15:28   ` [PATCH v6 1/7] tests: fix warn unused result on asprintf calls Frédéric Bérat
2023-06-06  6:18     ` Siddhesh Poyarekar
2023-06-02 15:28   ` [PATCH v6 2/7] tests: replace read by xread Frédéric Bérat
2023-06-06  6:21     ` Siddhesh Poyarekar
2023-06-06  8:00       ` Frederic Berat
2023-06-12 14:22         ` Siddhesh Poyarekar
2023-06-07 19:04     ` Frederic Berat
2023-06-02 15:28   ` [PATCH v6 3/7] tests: replace system by xsystem Frédéric Bérat
2023-06-06 12:17     ` Siddhesh Poyarekar
2023-06-02 15:28   ` [PATCH v6 4/7] tests: replace fread by xfread Frédéric Bérat
2023-06-06 12:18     ` Siddhesh Poyarekar
2023-06-07 19:03     ` Frederic Berat
2023-06-02 15:28   ` [PATCH v6 5/7] tests: replace fgets by xfgets Frédéric Bérat
2023-06-06 12:20     ` Siddhesh Poyarekar
2023-06-08  5:50     ` Maxim Kuvyrkov
2023-06-08  6:57       ` Frederic Berat
2023-06-02 15:28   ` [PATCH v6 6/7] tests: Replace various function calls with their x variant Frédéric Bérat
2023-06-06 12:20     ` Siddhesh Poyarekar
2023-06-02 15:28   ` [PATCH v6 7/7] Move {read,write}_all functions to a dedicated header Frédéric Bérat
2023-06-06 12:21     ` Siddhesh Poyarekar
2023-06-12 15:18 ` [PATCH v7 0/4] Fix warn unused result Frédéric Bérat
2023-06-12 15:18   ` [PATCH v7 1/4] tests: replace read by xread Frédéric Bérat
2023-06-12 16:57     ` Joseph Myers
2023-06-13 14:22       ` Frederic Berat
2023-06-14  8:52     ` [PATCH v8 1/2] " Frédéric Bérat
2023-06-14 11:51       ` Siddhesh Poyarekar
2023-06-12 15:18   ` [PATCH v7 2/4] tests: replace system by xsystem Frédéric Bérat
2023-06-13 14:10     ` Siddhesh Poyarekar
2023-06-13 14:13     ` Adhemerval Zanella Netto
2023-06-13 14:16       ` Siddhesh Poyarekar
2023-06-14  8:52     ` [PATCH 2/2] " Frédéric Bérat
2023-06-14 11:53       ` Siddhesh Poyarekar
2023-06-12 15:18   ` [PATCH v7 3/4] tests: replace fread by xfread Frédéric Bérat
2023-06-13 23:57     ` Siddhesh Poyarekar
2023-06-12 15:18   ` [PATCH v7 4/4] tests: replace fgets by xfgets Frédéric Bérat
2023-06-13 12:23     ` Siddhesh Poyarekar [this message]
2023-06-13 18:25       ` Joseph Myers
2023-06-13 23:56         ` Siddhesh Poyarekar

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=60698ba8-3981-480e-1171-6f93e10b7251@gotplt.org \
    --to=siddhesh@gotplt.org \
    --cc=fberat@redhat.com \
    --cc=joseph@codesourcery.com \
    --cc=libc-alpha@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).