From nobody Tue Feb 01 03:29:45 2022 X-Original-To: dev-commits-src-branches@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 72C2219AF905; Tue, 1 Feb 2022 03:29:47 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4Jnr5k3YtFz4gbt; Tue, 1 Feb 2022 03:29:46 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1643686187; 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; bh=hHs56AY2MBv5pggl7XTNVtB/lNekuKyqYb8bItKzyqo=; b=kfdVdEqJeKFwyPfrG1beZm2aMXLQXUVqC7NcvFM5XC+vy7JLf2OWgOEKhI5+wnMt9O9Awl oQSExHRE5X+0VUBjuUMEuUUV7nzHPGokEPJeh5a2xbdEWzmThqrppsboyOzGnUypJJ6XZg fBJAadIVupp2fLIuKFw/LpsjtSrsCo16Qj/+ws1YJpas46xP14L1LgnHuM6LpCDILHucrT Sxt2QpX73YIQHh9XissLKynOuUACsuaoX/u2uMNgm3ANfmXEDKtzO4xR1ENp4TSCBuDtqd bQH/3KkD87/fNO/73zis+XaMAcYKxqZwwgz4aKEknLmDcKvZga7/37vc4oo8uQ== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 04CE1842; Tue, 1 Feb 2022 03:29:46 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 2113TjMD088143; Tue, 1 Feb 2022 03:29:45 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 2113TjiB088142; Tue, 1 Feb 2022 03:29:45 GMT (envelope-from git) Date: Tue, 1 Feb 2022 03:29:45 GMT Message-Id: <202202010329.2113TjiB088142@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Konstantin Belousov Subject: git: ec2db06d0db2 - stable/13 - stdio: add test for 86a16ada1ea608408cec370: fflush() handling of errors List-Id: Commits to the stable branches of the FreeBSD src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-branches@freebsd.org X-BeenThere: dev-commits-src-branches@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: kib X-Git-Repository: src X-Git-Refname: refs/heads/stable/13 X-Git-Reftype: branch X-Git-Commit: ec2db06d0db22ae11c1b5414446e3aecd71a93e3 Auto-Submitted: auto-generated ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1643686186; 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; bh=hHs56AY2MBv5pggl7XTNVtB/lNekuKyqYb8bItKzyqo=; b=l1A6m90OJBT2p41CmKEXUPkucliVpbEg3oN9rVxwBw8/+nm/kfiFBDlrzhjuzpX3TIyZvr Hx5iFaDOfMvs2w2v6gtq9lB5+XigozxZUZPaC94qHx4WQxaf584WzlauBDLrus4OvChkST SnzEp6xI1GRcrBhmjFi86dm0eQzQxZi0OzbmuP+gtKUEXk8Vr0VJ1t6fvmTrXY3/TfqCAP zDWasSLUvPjFQhqsHmVkd4a9m/hRm+N2RzrkKPMxG807BxRkn6DgG3j7TrdYaXo/t3GUBm qLCDd/iGW6neiCyaDHlyn3g7XIcXs76lMoC7mDaA6/cdMvWDktgvodxmsF78NQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1643686187; a=rsa-sha256; cv=none; b=XvAlEifr42YfVscqM3r/DfUpd3Pmj3wQWboikhT72+ogtP5ipYHUBks676BUcNebPconAd OgqW4te+omnJ++4WM6YFZ+A20SU2FtzqHxtuivUi5fIjqdz7mj3mQy/aXv1qH8ChmZS0QC y/dAQgTbViB+Y7WCZSaU7IdxkwXVYHJvOFKiqvURd9H4gaBKbvv4MBrjjzVxck/7lNMyDu TONnq+Ei3rAgO5eUhstZ/lp/5EebqE4sq+xvBzK/yie6wNPLsjv7EVEsi32DSy0puQVrt3 a+aeHUsWeocxJAA0RZaI4VocN3JFdLtbfJy5WErmS+Mvrbm9sUOzbujtXIIzLA== ARC-Authentication-Results: i=1; mx1.freebsd.org; none X-ThisMailContainsUnwantedMimeParts: N The branch stable/13 has been updated by kib: URL: https://cgit.FreeBSD.org/src/commit/?id=ec2db06d0db22ae11c1b5414446e3aecd71a93e3 commit ec2db06d0db22ae11c1b5414446e3aecd71a93e3 Author: Konstantin Belousov AuthorDate: 2022-01-25 21:56:08 +0000 Commit: Konstantin Belousov CommitDate: 2022-02-01 03:29:16 +0000 stdio: add test for 86a16ada1ea608408cec370: fflush() handling of errors PR: 76398 (cherry picked from commit 72d5dedfa69fa74801d19dd17c49867882d73d97) --- lib/libc/tests/stdio/Makefile | 2 + lib/libc/tests/stdio/eintr_test.c | 143 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 145 insertions(+) diff --git a/lib/libc/tests/stdio/Makefile b/lib/libc/tests/stdio/Makefile index 248a05bc45e7..792375ba17b8 100644 --- a/lib/libc/tests/stdio/Makefile +++ b/lib/libc/tests/stdio/Makefile @@ -2,6 +2,7 @@ .include +ATF_TESTS_C+= eintr_test ATF_TESTS_C+= fdopen_test ATF_TESTS_C+= fmemopen2_test ATF_TESTS_C+= fopen2_test @@ -30,6 +31,7 @@ NETBSD_ATF_TESTS_C+= popen_test NETBSD_ATF_TESTS_C+= printf_test NETBSD_ATF_TESTS_C+= scanf_test +LIBADD.eintr_test+= md LIBADD.printfloat_test+= m LIBADD.scanfloat_test+= m diff --git a/lib/libc/tests/stdio/eintr_test.c b/lib/libc/tests/stdio/eintr_test.c new file mode 100644 index 000000000000..55354c8926c5 --- /dev/null +++ b/lib/libc/tests/stdio/eintr_test.c @@ -0,0 +1,143 @@ +/* + * Initially written by Yar Tikhiy in PR 76398. + * Bug fixes and instrumentation by kib@freebsd.org. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#define NDATA 1000 +#define DELAY 2 + +static void +hup(int signo __unused) +{ +} + +static int ndata, seq; + +static void +setdata(int n) +{ + ndata = n; + seq = 0; +} + +static char * +getdata(void) +{ + static char databuf[256]; + static char xeof[] = "#"; + + if (seq > ndata) + return (NULL); + if (seq == ndata) { + seq++; + return (xeof); + } + sprintf(databuf, "%08d xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n", seq++); + return (databuf); +} + +ATF_TC_WITHOUT_HEAD(eintr_test); +ATF_TC_BODY(eintr_test, tc) +{ + char c, digest0[33], digest[33], *p; + FILE *fp; + int i, s[2], total0, total; + MD5_CTX md5; + pid_t child; + struct sigaction sa; + + MD5Init(&md5); + setdata(NDATA); + for (total0 = 0; (p = getdata()) != NULL; total0 += strlen(p)) + MD5Update(&md5, p, strlen(p)); + p = MD5End(&md5, digest0); + + sa.sa_handler = hup; + sigemptyset(&sa.sa_mask); + sa.sa_flags = 0; + ATF_REQUIRE(sigaction(SIGHUP, &sa, NULL) == 0); + + ATF_REQUIRE(socketpair(PF_UNIX, SOCK_STREAM, 0, s) == 0); + + switch (child = fork()) { + case -1: + atf_tc_fail("fork failed %s", strerror(errno)); + break; + + case 0: + ATF_REQUIRE((fp = fdopen(s[0], "w")) != NULL); + close(s[1]); + setdata(NDATA); + while ((p = getdata())) { + for (; *p;) { + if (fputc(*p, fp) == EOF) { + if (errno == EINTR) { + clearerr(fp); + } else { + atf_tc_fail("fputc errno %s", + strerror(errno)); + } + } else { + p++; + } + } + } + fclose(fp); + break; + + default: + close(s[0]); + ATF_REQUIRE((fp = fdopen(s[1], "r")) != NULL); + sleep(DELAY); + ATF_REQUIRE(kill(child, SIGHUP) != -1); + sleep(DELAY); + MD5Init(&md5); + for (total = 0;;) { + i = fgetc(fp); + if (i == EOF) { + if (errno == EINTR) { + clearerr(fp); + } else { + atf_tc_fail("fgetc errno %s", + strerror(errno)); + } + continue; + } + total++; + c = i; + MD5Update(&md5, &c, 1); + if (i == '#') + break; + } + MD5End(&md5, digest); + fclose(fp); + ATF_REQUIRE_MSG(total == total0, + "Total number of bytes read does not match: %d %d", + total, total0); + ATF_REQUIRE_MSG(strcmp(digest, digest0) == 0, + "Digests do not match %s %s", digest, digest0); + break; + } +} + +ATF_TP_ADD_TCS(tp) +{ + ATF_TP_ADD_TC(tp, eintr_test); + return (atf_no_error()); +}