From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from earwig.ash.relay.mailchannels.net (earwig.ash.relay.mailchannels.net [23.83.222.54]) by sourceware.org (Postfix) with ESMTPS id 034B53858D38 for ; Tue, 13 Jun 2023 23:58:04 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 034B53858D38 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=gotplt.org Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gotplt.org X-Sender-Id: dreamhost|x-authsender|siddhesh@gotplt.org Received: from relay.mailchannels.net (localhost [127.0.0.1]) by relay.mailchannels.net (Postfix) with ESMTP id 55A288229E3; Tue, 13 Jun 2023 23:58:01 +0000 (UTC) Received: from pdx1-sub0-mail-a273.dreamhost.com (unknown [127.0.0.6]) (Authenticated sender: dreamhost) by relay.mailchannels.net (Postfix) with ESMTPA id C54468229AE; Tue, 13 Jun 2023 23:58:00 +0000 (UTC) ARC-Seal: i=1; s=arc-2022; d=mailchannels.net; t=1686700680; a=rsa-sha256; cv=none; b=FBej58+DvyorwHwhKUEGCLqRemYJXuJ5pWw44Z0fS6iZSLJaOSY7IYmyu4rB9C/GwSn8ln WRHL4HcBTSpqAsZzhtfkh5vGd53G9uPZG8sgsTC/GSd6mmI4bqY/9WXLPtXoFMV25YN7PD Vr/lM1wJZ5V1YR9O5eW64yvqPmU8TCx3qBXL8Yg1LJP0+oXWSVy6LYJBkMzUR4lw7HF+Zj rHSugjjMALDUaEYBL30eWQ/TBYVNr+bLq3a8mtKh9LLf868tatLiPQh2o/CFHjRL0iXVHc UuJ8bMNGzMxQOkVakQaKKFXXx0vXDrfiq4cDuVI/Csvh9HG3ApZgdad6MYaCtg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=mailchannels.net; s=arc-2022; t=1686700680; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=99Y4nsh/Ew4AAlMT69YqswZefHZH5YEH7n8dpc46cPw=; b=OsHOpXmGF40MvMt2RVMpxvhiV1JyNfiYb6lIKNXMR/3WXS2fYgWhQgKKkNLEOM0tq8xRsF UyMIB57UE6cacEC/tNFY9WYdiyNGWzgcoLx95zGHtk/FjEXMJy4kc7tP5ludxj6dpm1jg0 gZHrJVAXjc7OI1O/u9Bd1jDKJsz46r6yeCn2ACvmsdjo2crD2LZogMdP0XJzApuLn+K1oV kpQh45XdVEuJZHKdVOcxx3lgGqHWrUkVh95lMu4+x7RVuo3xkHae5TGan/zGXuPxDj/qeO Sn+69tD4EaQFxfyWyD1h7F1r33HH5SbMrTZ0JeV7f2XGrZXWh0JWjzTdkUNrKw== ARC-Authentication-Results: i=1; rspamd-7c78575475-h4zf6; auth=pass smtp.auth=dreamhost smtp.mailfrom=siddhesh@gotplt.org X-Sender-Id: dreamhost|x-authsender|siddhesh@gotplt.org X-MC-Relay: Neutral X-MailChannels-SenderId: dreamhost|x-authsender|siddhesh@gotplt.org X-MailChannels-Auth-Id: dreamhost X-Robust-Society: 07e6ef3b5303fe4a_1686700681064_2605357201 X-MC-Loop-Signature: 1686700681064:2510863584 X-MC-Ingress-Time: 1686700681063 Received: from pdx1-sub0-mail-a273.dreamhost.com (pop.dreamhost.com [64.90.62.162]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384) by 100.104.253.209 (trex/6.9.1); Tue, 13 Jun 2023 23:58:01 +0000 Received: from [192.168.2.12] (bras-vprn-toroon4834w-lp130-02-142-113-138-85.dsl.bell.ca [142.113.138.85]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: siddhesh@gotplt.org) by pdx1-sub0-mail-a273.dreamhost.com (Postfix) with ESMTPSA id 4QglqX30Srz2q; Tue, 13 Jun 2023 16:58:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gotplt.org; s=dreamhost; t=1686700680; bh=99Y4nsh/Ew4AAlMT69YqswZefHZH5YEH7n8dpc46cPw=; h=Date:Subject:To:From:Content-Type:Content-Transfer-Encoding; b=clBTcnLtQVbnEShRUQWzPlYO0LceMW5oic1s8b2EZVLETdfZBc2uy2UVeGtE0QyWd ZGVUGmKbJqOi7N9xsDEI0Z01KDmLwnlKM+JK1z88LcG3qp/L9rW27x5SeU57WeFez2 dfoTFIhsjhhg9c8ZCIa2oyZEm+VZyvTtG65+cplSIiGpCvQgx++0wIT8CBs/AyqKN0 y7rlBC+Sl9QIHKs0Nbpzh3RLo95Dp5gGmQf7B4msghSiizOo5hVGOuvyt5/bJMQwIK aAVeKRjSkst96xy9qM8t6hHm3jW6L0e2rDXcBjsuPqthCT8Tb5vuKK1snclwSE5CcR 1oMBl2wKgD4yg== Message-ID: Date: Tue, 13 Jun 2023 19:57:59 -0400 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.10.0 Subject: Re: [PATCH v7 3/4] tests: replace fread by xfread Content-Language: en-US To: =?UTF-8?B?RnLDqWTDqXJpYyBCw6lyYXQ=?= , libc-alpha@sourceware.org References: <20230612151821.199003-1-fberat@redhat.com> <20230612151821.199003-4-fberat@redhat.com> From: Siddhesh Poyarekar In-Reply-To: <20230612151821.199003-4-fberat@redhat.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-3037.3 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,KAM_SHORT,NICE_REPLY_A,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,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 2023-06-12 11:18, Frédéric Bérat wrote: > With fortification enabled, fread 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 Reviewed-by: Siddhesh Poyarekar > > 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 = 0; > if (fseek (f, -10, SEEK_CUR) == 0) > { > @@ -72,7 +73,7 @@ Got %d instead\n", > perror ("fopen(\"r+\")"); > } > > - fread (buf, 3, 1, f); > + xfread (buf, 3, 1, f); > errno = 0; > if (fseek (f, -10, SEEK_CUR) == 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) != 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 = 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 = 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 = 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 = 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] = j; > - fread (buf + 1, 1, 23, f); > + xfread (buf + 1, 1, 23, f); > buf[24] = '\0'; > if (strcmp (buf, "Where does this text go?") != 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 = 1, stdio_block_write = 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 = 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 = 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) != 0) > { > diff --git a/support/Makefile b/support/Makefile > index 8ee3344c9a..994639a915 100644 > --- a/support/Makefile > +++ b/support/Makefile > @@ -125,6 +125,7 @@ libsupport-routines = \ > xfclose \ > xfopen \ > xfork \ > + xfread \ > xfreopen \ > xftruncate \ > xgetline \ > diff --git a/support/xfread.c b/support/xfread.c > new file mode 100644 > index 0000000000..948f0c8111 > --- /dev/null > +++ b/support/xfread.c > @@ -0,0 +1,39 @@ > +/* fread 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 > + . */ > + > +#include > + > +#include > +#include > + > +void > +xfread (void *ptr, size_t size, size_t nmemb, FILE *stream) > +{ > + size_t count = 0; > + char *p = ptr; > + > + while (count < nmemb) > + { > + size_t ret = fread (p, size, nmemb - count, stream); > + if (ret <= 0 && ferror(stream)) > + FAIL_EXIT1 ("read of %zu bytes failed after %td: %m", > + size * nmemb, p - (char *) ptr); > + count += ret; > + p += 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