From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by sourceware.org (Postfix) with ESMTPS id 4F11C3858296 for ; Wed, 7 Jun 2023 19:04:12 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 4F11C3858296 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=redhat.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1686164651; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=p/zKTtjOz/4tq/LByl5V/bfdx7IC2ekCsxCom+SNy60=; b=IiaOSDUdk7Fm2cL35p1yej1X9zYjFGe+jLmHxM/AuOZMl7zGtiXRP849wYug7aWX09Ew6O +KAfirRjohPKa+rVo7b+18E3N2YR/NgZa7FQoqWe1hVuXaQk0kajBB4D3RP8QO0cK1i+0v kjVPbSnTS5xpkOr+wsKElFJ59nuaSAw= Received: from mail-ed1-f71.google.com (mail-ed1-f71.google.com [209.85.208.71]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-341-B4_qBObfM6WBAE6BOOFCgA-1; Wed, 07 Jun 2023 15:04:10 -0400 X-MC-Unique: B4_qBObfM6WBAE6BOOFCgA-1 Received: by mail-ed1-f71.google.com with SMTP id 4fb4d7f45d1cf-51496307313so1101434a12.1 for ; Wed, 07 Jun 2023 12:04:10 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1686164649; x=1688756649; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=p/zKTtjOz/4tq/LByl5V/bfdx7IC2ekCsxCom+SNy60=; b=Jl8eDmID1UfmKovIJUniLO7BasqXW4rir/Ns23CuCIC+pCVKyOkNR1DfoXP5M+qKfm sRZIb7p1Y7CeoFIwM9weBsSKY3rXN8gWX5JvB5pvsFuYQssXZ5wCcglkYK2Tv5VNEpg0 QhAFItLwS328FtMpaoKCBVEGzhJ0vxKuMcK9UrDY0+daC3BY3g4WiQCL7RMn3Cq3NiZ1 yyTbz0wslF1elgW5CIQVHmVkXZn9zVjdgovSsSd0sSN1NcbgBKfXhgDuWH6HFVsY9j77 CFEAdH8qD0quHdZuO0N01aPS0lRJGRwGkXB+GWY0rnV6ldIcJbxLiVBYFqm3NTkOvAE9 09mw== X-Gm-Message-State: AC+VfDwy7PHcuhBiK03gdv704Huxte7/19MF1cLNbV/pXCyFhEQLbKM/ Ph8HQJ2QsaPxUhO7kUbwMkPZqQSo/qTdzjuBKXrMEN0l38yE+MLCLqm/6FZ+TIQpEipbtFhe6ux AnlDsKnty5S5+NMq5lgU7K0/qvfN/zTuopLQb9z2r6UY2 X-Received: by 2002:a17:907:96a1:b0:94a:845c:3529 with SMTP id hd33-20020a17090796a100b0094a845c3529mr7499406ejc.9.1686164649049; Wed, 07 Jun 2023 12:04:09 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ549GN+V14qq8exPNl9BengybdvUKRLsgHPDnFSnFLrfHuStD2xcklzg1EecLMEKC7x21EyU1DsLmAVrYAYFGI= X-Received: by 2002:a17:907:96a1:b0:94a:845c:3529 with SMTP id hd33-20020a17090796a100b0094a845c3529mr7499386ejc.9.1686164648668; Wed, 07 Jun 2023 12:04:08 -0700 (PDT) MIME-Version: 1.0 References: <20230602152812.108497-1-fberat@redhat.com> <20230602152812.108497-5-fberat@redhat.com> In-Reply-To: <20230602152812.108497-5-fberat@redhat.com> From: Frederic Berat Date: Wed, 7 Jun 2023 21:03:57 +0200 Message-ID: Subject: Re: [PATCH v6 4/7] tests: replace fread by xfread To: libc-alpha@sourceware.org Cc: siddhesh@gotplt.org X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Spam-Status: No, score=-12.6 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,KAM_SHORT,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_NONE,TXREP,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: On Fri, Jun 2, 2023 at 5:28=E2=80=AFPM Fr=C3=A9d=C3=A9ric B=C3=A9rat wrote: > > With fortification enabled, fread calls return result needs to be checked= , > has it gets the __wur macro enabled. > --- > Changes since v4/v5: > - Rebased > > libio/bug-fseek.c | 7 ++++--- > stdio-common/bug12.c | 12 ++++++----- > stdio-common/bug3.c | 4 +++- > stdio-common/bug4.c | 4 +++- > stdio-common/tst-cookie.c | 5 ++++- > stdio-common/tst-fmemopen3.c | 4 +++- > support/Makefile | 1 + > support/xfread.c | 39 ++++++++++++++++++++++++++++++++++++ > support/xstdio.h | 1 + > 9 files changed, 65 insertions(+), 12 deletions(-) > create mode 100644 support/xfread.c > > diff --git a/libio/bug-fseek.c b/libio/bug-fseek.c > index 1b60580b53..19d5e2429e 100644 > --- a/libio/bug-fseek.c > +++ b/libio/bug-fseek.c > @@ -3,6 +3,7 @@ > #include > #include > > +#include > > static char *fname; > > @@ -48,7 +49,7 @@ do_test (void) > perror ("fopen(\"r\")"); > } > > - fread (buf, 3, 1, f); > + xfread (buf, 3, 1, f); > errno =3D 0; > if (fseek (f, -10, SEEK_CUR) =3D=3D 0) > { > @@ -72,7 +73,7 @@ Got %d instead\n", > perror ("fopen(\"r+\")"); > } > > - fread (buf, 3, 1, f); > + xfread (buf, 3, 1, f); > errno =3D 0; > if (fseek (f, -10, SEEK_CUR) =3D=3D 0) > { > @@ -96,7 +97,7 @@ Got %d instead\n", > perror ("fopen(\"r+\")"); > } > > - fread (buf, 3, 1, f); > + xfread (buf, 3, 1, f); > if (ftell (f) !=3D 3) > { > puts ("ftell failed"); > diff --git a/stdio-common/bug12.c b/stdio-common/bug12.c > index 48610c0e78..1ba296deb4 100644 > --- a/stdio-common/bug12.c > +++ b/stdio-common/bug12.c > @@ -1,6 +1,8 @@ > #include > #include > > +#include > + > char x[4096], z[4096], b[21], m[4096 * 4]; > > int > @@ -20,24 +22,24 @@ main (void) > } > rewind (f); > > - fread (m, 4096 * 4 - 10, 1, f); > - fread (b, 20, 1, f); > + xfread (m, 4096 * 4 - 10, 1, f); > + xfread (b, 20, 1, f); > printf ("got %s (should be %s)\n", b, "zzzzzzzzzzxxxxxxxxxx"); > if (strcmp (b, "zzzzzzzzzzxxxxxxxxxx")) > failed =3D 1; > > fseek (f, -40, SEEK_CUR); > - fread (b, 20, 1, f); > + xfread (b, 20, 1, f); > printf ("got %s (should be %s)\n", b, "zzzzzzzzzzzzzzzzzzzz"); > if (strcmp (b, "zzzzzzzzzzzzzzzzzzzz")) > failed =3D 1; > > - fread (b, 20, 1, f); > + xfread (b, 20, 1, f); > printf ("got %s (should be %s)\n", b, "zzzzzzzzzzxxxxxxxxxx"); > if (strcmp (b, "zzzzzzzzzzxxxxxxxxxx")) > failed =3D 1; > > - fread (b, 20, 1, f); > + xfread (b, 20, 1, f); > printf ("got %s (should be %s)\n", b, "xxxxxxxxxxxxxxxxxxxx"); > if (strcmp (b, "xxxxxxxxxxxxxxxxxxxx")) > failed =3D 1; > diff --git a/stdio-common/bug3.c b/stdio-common/bug3.c > index 62a6cab330..deabd00572 100644 > --- a/stdio-common/bug3.c > +++ b/stdio-common/bug3.c > @@ -1,6 +1,8 @@ > #include > #include > > +#include > + > int > main (void) > { > @@ -32,7 +34,7 @@ main (void) > char buf[25]; > > buf[0] =3D j; > - fread (buf + 1, 1, 23, f); > + xfread (buf + 1, 1, 23, f); > buf[24] =3D '\0'; > if (strcmp (buf, "Where does this text go?") !=3D 0) > { > diff --git a/stdio-common/bug4.c b/stdio-common/bug4.c > index cf7fe116eb..4059ff75b3 100644 > --- a/stdio-common/bug4.c > +++ b/stdio-common/bug4.c > @@ -2,6 +2,8 @@ > #include > #include > > +#include > + > int stdio_block_read =3D 1, stdio_block_write =3D 1; > > int > @@ -30,7 +32,7 @@ main (int argc, char *argv[]) > fseek (f, 8180L, 0); > fwrite ("Where does this text come from?", 1, 31, f); > fseek (f, 8180L, 0); > - fread (buffer, 1, 31, f); > + xfread (buffer, 1, 31, f); > fwrite (buffer, 1, 31, stdout); > fclose (f); > remove (filename); > diff --git a/stdio-common/tst-cookie.c b/stdio-common/tst-cookie.c > index 030e684562..90ebc8e58c 100644 > --- a/stdio-common/tst-cookie.c > +++ b/stdio-common/tst-cookie.c > @@ -5,6 +5,8 @@ > > #include > > +#include > + > > #define THE_COOKIE ((void *) 0xdeadbeeful) > > @@ -77,7 +79,8 @@ do_test (void) > > f =3D fopencookie (THE_COOKIE, "r+", fcts); > > - fread (buf, 1, 1, f); > + xfread (buf, 1, 1, f); > + > fwrite (buf, 1, 1, f); > fseek (f, 0, SEEK_CUR); > fclose (f); > diff --git a/stdio-common/tst-fmemopen3.c b/stdio-common/tst-fmemopen3.c > index bef87b712a..1627f17f59 100644 > --- a/stdio-common/tst-fmemopen3.c > +++ b/stdio-common/tst-fmemopen3.c > @@ -21,6 +21,8 @@ > #include > #include > > +#include > + > static void > print_buffer (const char *s, size_t n) > { > @@ -153,7 +155,7 @@ do_test_read_seek_neg (const char *mode, const char *= expected) > > FILE *fp =3D fmemopen (buf, sizeof (buf), mode); > fseek (fp, offset, SEEK_END); > - fread (tmp, tmps, 1, fp); > + xfread (tmp, tmps, 1, fp); > > if (memcmp (tmp, expected, tmps) !=3D 0) > { > diff --git a/support/Makefile b/support/Makefile > index fbbc305423..3eed2deb1a 100644 > --- a/support/Makefile > +++ b/support/Makefile > @@ -126,6 +126,7 @@ libsupport-routines =3D \ > xfopen \ > xfork \ > xfreopen \ > + xfread \ xfread must be before xfreopen > xftruncate \ > xgetline \ > xgetsockname \ > diff --git a/support/xfread.c b/support/xfread.c > new file mode 100644 > index 0000000000..c21187d476 > --- /dev/null > +++ b/support/xfread.c > @@ -0,0 +1,39 @@ > +/* fread with error checking. > + Copyright (C) 2016-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 > + . */ > + > +#include > + > +#include > +#include > + > +void > +xfread (void *ptr, size_t size, size_t nmemb, FILE *stream) > +{ > + size_t count =3D 0; > + char *p =3D ptr; > + > + while (count < nmemb) > + { > + size_t ret =3D fread (p, size, nmemb - count, stream); > + if (ret <=3D 0 && ferror(stream)) > + FAIL_EXIT1 ("read of %zu bytes failed after %td: %m", > + size * nmemb, p - (char *) ptr); > + count +=3D ret; > + p +=3D size * ret; > + } > +} > diff --git a/support/xstdio.h b/support/xstdio.h > index 5410d42579..633c342c82 100644 > --- a/support/xstdio.h > +++ b/support/xstdio.h > @@ -27,6 +27,7 @@ __BEGIN_DECLS > 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); > > /* Read a line from FP, using getline. *BUFFER must be NULL, or a > heap-allocated pointer of *LENGTH bytes. Return the number of > -- > 2.40.1 >