From patchwork Mon Jun 12 15:18:21 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Frederic Berat X-Patchwork-Id: 1793958 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=sourceware.org (client-ip=8.43.85.97; helo=sourceware.org; envelope-from=libc-alpha-bounces+incoming=patchwork.ozlabs.org@sourceware.org; receiver=) Authentication-Results: legolas.ozlabs.org; dkim=pass (1024-bit key; secure) header.d=sourceware.org header.i=@sourceware.org header.a=rsa-sha256 header.s=default header.b=pwviYGfc; dkim-atps=neutral Received: from sourceware.org (ip-8-43-85-97.sourceware.org [8.43.85.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-384) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4QfwMY4Q6bz20QH for ; Tue, 13 Jun 2023 01:19:21 +1000 (AEST) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 94B6B385770A for ; Mon, 12 Jun 2023 15:19:19 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 94B6B385770A DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1686583159; bh=LTYFzkZ2K5YglqxzFoMpMP638PmpqoHW6ifHe+QVCho=; h=To:Cc:Subject:Date:In-Reply-To:References:List-Id: List-Unsubscribe:List-Archive:List-Post:List-Help:List-Subscribe: From:Reply-To:From; b=pwviYGfcrQV4Us3tFKVV0t7OGlSI2j4tVZCKciyTitcxLWu8JPJwOc8PCfTlh5eL6 eTcPvxyYQTnm6a2T2Wj7QAABj9tLkJlkcWjA8ZhfOuZbz4vCWHdwcsQ8l5I1qS56Mm zdBE8I2Q3LFjQayr0rfrgVMf947x3xWfCzDPwjT8= X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by sourceware.org (Postfix) with ESMTPS id 803633858423 for ; Mon, 12 Jun 2023 15:18:36 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 803633858423 Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-460-5Lps2N3LMLySLkT8U1JrjQ-1; Mon, 12 Jun 2023 11:18:34 -0400 X-MC-Unique: 5Lps2N3LMLySLkT8U1JrjQ-1 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.rdu2.redhat.com [10.11.54.1]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 8E800801585; Mon, 12 Jun 2023 15:18:33 +0000 (UTC) Received: from Nymeria-redhat.redhat.com (unknown [10.39.192.6]) by smtp.corp.redhat.com (Postfix) with ESMTPS id E797940C20F4; Mon, 12 Jun 2023 15:18:32 +0000 (UTC) To: libc-alpha@sourceware.org Cc: siddhesh@gotplt.org, fberat@redhat.com Subject: [PATCH v7 4/4] tests: replace fgets by xfgets Date: Mon, 12 Jun 2023 17:18:21 +0200 Message-Id: <20230612151821.199003-5-fberat@redhat.com> In-Reply-To: <20230612151821.199003-1-fberat@redhat.com> References: <20230612151821.199003-1-fberat@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.1 on 10.11.54.1 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com X-Spam-Status: No, score=-12.4 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, RCVD_IN_MSPIKE_H5, RCVD_IN_MSPIKE_WL, 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 X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: =?utf-8?q?Fr=C3=A9d=C3=A9ric_B=C3=A9rat_via_Libc-alpha?= From: Frederic Berat Reply-To: =?utf-8?b?RnLDqWTDqXJpYyBCw6lyYXQ=?= Errors-To: libc-alpha-bounces+incoming=patchwork.ozlabs.org@sourceware.org Sender: "Libc-alpha" With fortification enabled, fgets calls return result needs to be checked, has it gets the __wur macro enabled. Reviewed-by: Siddhesh Poyarekar --- 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 #include +#include + 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); 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 #include +#include + 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 #include +#include 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 + . */ + +#include + +#include +#include + +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 #include +#include 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; }