From nobody Wed Jan 24 19:44:59 2024 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 4TKvYl5Ftvz58c69; Wed, 24 Jan 2024 19:44:59 +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 4TKvYl28lSz46CH; Wed, 24 Jan 2024 19:44:59 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1706125499; 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=aLWd8Lr5ByUSBn0qc1l0Z+D30gW5K1Se/mOvBoR6lBc=; b=D4WnR4+K0UxKdjM6UAIuI5fRh9Nr/XK2jfBhHbL6iA8XOmKRkSME5QqvnwbgDEAziHkl5G 7Ik4fgbNVQWb4PKncPKlPeHuWyt5AVq7ifSidL5OyJq1YiE/D02AiKcDnfjQVqtdzTREdb gTKiluIGRvclQfC4g/E8jmzKJF4EVsn7Nb061Z5ujRV9b3nG4yBfJvyICzfGIntM+0HFnp 3hkTZWXGdiOl8kNI4mLZoSH1T5vdjxgjz2lBzKP0nk+26XzStuwmYYOG/UkrF7oWK175J8 dE02/bPGgVogKbskTKbfOrykcPfqvoGAGYHqYwFmQutFQP6FlOt6q//1aVt2cg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1706125499; 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=aLWd8Lr5ByUSBn0qc1l0Z+D30gW5K1Se/mOvBoR6lBc=; b=dmrEoyOLDIeuWqUO/Srv1OXb0EErY19mzpvA6uwPZB3dVvx1POdRuttN60NQnbkVVuxnba 3lVc+ttdvEeqHWdmFTMggbNywftzPl2uoRmGrncJlCpYhUAi3q3+o0GMHTpYXHue3lYX+q aFN2zyRRyVC5pq+PVx13z5iWUhHOhh4UwKDoOWNSh0stE8S9k0Mp9Roa0BArykbzhIuR4c MzEwmbpCMgNlP8zI9VRmGKfxAoASkaqsdgId9/yH0UU+xraUKZnX/Tbe+vgUPUwOQwjdJ0 SmXkqkp5o0ffPWG/XwiicWKOV6KD3xsI6qRf1HV46JjWLXXTDbqAwGNAu+/l8w== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1706125499; a=rsa-sha256; cv=none; b=c/m5FSYpvyhBzTZU+1yOwW095EZSvMTtso3hMscVcPNDa5bIP3QQd23VO0bjqSlN/7Qlka MMP7ZG8Y7JEScCGPKphOfS3/stqnILe2ROi9TxIQSG9AmNd5RCD9iwZ4jwxqFO0YtvBfMY A0BitW8WvH866yElWqewIrX7wIErE9JiXnSxTgJOnGU6xaSIAJ6ta4VglLoW6KZ5SU4L5S G+o5plyFKVNxDE/8nRGlMFfaT4Puexbmsz8KVMzQ9N7SSv8J/m9r9Cjfmt9uodzzXWXOtG 2lSIq/fGzap6KTaNJpUtsuaL7TWRaPerOiy69Qkir4jXnApwbuIq3otDO+1PCA== 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 4TKvYl1Cj2zS8y; Wed, 24 Jan 2024 19:44:59 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.17.1/8.17.1) with ESMTP id 40OJixel006069; Wed, 24 Jan 2024 19:44:59 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.17.1/8.17.1/Submit) id 40OJixcS006066; Wed, 24 Jan 2024 19:44:59 GMT (envelope-from git) Date: Wed, 24 Jan 2024 19:44:59 GMT Message-Id: <202401241944.40OJixcS006066@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Robert Clausecker Subject: git: acb47064d658 - stable/14 - lib/libc/tests/string: add memrchr unit tests 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: fuz X-Git-Repository: src X-Git-Refname: refs/heads/stable/14 X-Git-Reftype: branch X-Git-Commit: acb47064d65813386dc15f6278037f1a76ec7eab Auto-Submitted: auto-generated The branch stable/14 has been updated by fuz: URL: https://cgit.FreeBSD.org/src/commit/?id=acb47064d65813386dc15f6278037f1a76ec7eab commit acb47064d65813386dc15f6278037f1a76ec7eab Author: Robert Clausecker AuthorDate: 2023-12-06 09:11:40 +0000 Commit: Robert Clausecker CommitDate: 2024-01-24 19:39:30 +0000 lib/libc/tests/string: add memrchr unit tests The "values" test case is specifically crafted to detect the off-by-one error previous discovered in the scalar strchrnul implementation. Tested by: developers@, exp-run Approved by: mjg MFC after: 1 month MFC to: stable/14 PR: 275785 Differential Revision: https://reviews.freebsd.org/D42925 (cherry picked from commit 691ff1832e09a6ccbc8f5b04c88cafc7452b3ce6) --- lib/libc/tests/string/Makefile | 1 + lib/libc/tests/string/memrchr_test.c | 116 +++++++++++++++++++++++++++++++++++ 2 files changed, 117 insertions(+) diff --git a/lib/libc/tests/string/Makefile b/lib/libc/tests/string/Makefile index a6e8eb18075a..4fce79685c0e 100644 --- a/lib/libc/tests/string/Makefile +++ b/lib/libc/tests/string/Makefile @@ -11,6 +11,7 @@ ATF_TESTS_C+= flsl_test ATF_TESTS_C+= flsll_test ATF_TESTS_C+= memccpy_test ATF_TESTS_C+= memcmp_test +ATF_TESTS_C+= memrchr_test ATF_TESTS_C+= memset_s_test ATF_TESTS_C+= strncmp_test ATF_TESTS_C+= stpncpy_test diff --git a/lib/libc/tests/string/memrchr_test.c b/lib/libc/tests/string/memrchr_test.c new file mode 100644 index 000000000000..12f696c9dc1e --- /dev/null +++ b/lib/libc/tests/string/memrchr_test.c @@ -0,0 +1,116 @@ +/*- + * SPDX-License-Identifier: BSD-2-Clause + * + * Copyright (c) 2023 Robert Clausecker + */ + +#include + +#include +#include +#include + +#include + +static void *(*memrchr_fn)(const void *, int, size_t); + +ATF_TC_WITHOUT_HEAD(null); +ATF_TC_BODY(null, tc) +{ + ATF_CHECK_EQ(memrchr_fn(NULL, 42, 0), NULL); +} + +ATF_TC_WITHOUT_HEAD(not_found); +ATF_TC_BODY(not_found, tc) +{ + size_t i, j; + char buf[1+15+64+1]; /* offset [0..15] + 64 buffer bytes + sentinels */ + + buf[0] = 'X'; + memset(buf + 1, '-', sizeof(buf) - 1); + + for (i = 0; i < 16; i++) + for (j = 0; j < 64; j++) { + buf[i + j + 1] = 'X'; + ATF_CHECK_EQ(memrchr_fn(buf + i + 1, 'X', j), NULL); + buf[i + j + 1] = '-'; + } +} + +static void +do_found_test(char buf[], size_t len, size_t first, size_t second) +{ + /* invariant: first <= second */ + + buf[first] = 'X'; + buf[second] = 'X'; + ATF_CHECK_EQ(memrchr_fn(buf, 'X', len), buf + second); + buf[first] = '-'; + buf[second] = '-'; +} + +ATF_TC_WITHOUT_HEAD(found); +ATF_TC_BODY(found, tc) +{ + size_t i, j, k, l; + char buf[1+15+64+1]; + + buf[0] = 'X'; + memset(buf + 1, '-', sizeof(buf) - 1); + + for (i = 0; i < 16; i++) + for (j = 0; j < 64; j++) + for (k = 0; k < j; k++) + for (l = 0; l <= k; l++) { + buf[i + j + 1] = 'X'; + do_found_test(buf + i + 1, j, l, k); + buf[i + j + 1] = '-'; + } +} + +/* check that the right character is found */ +static void +do_values_test(unsigned char buf[], size_t len, size_t i, int c) +{ + /* sentinels */ + buf[-1] = c; + buf[len] = c; + memset(buf, c + 1, len); + + if (i < len) { + buf[i] = c; + ATF_CHECK_EQ(memrchr_fn(buf, c, len), buf + i); + } else + ATF_CHECK_EQ(memrchr_fn(buf, c, len), NULL); +} + +ATF_TC_WITHOUT_HEAD(values); +ATF_TC_BODY(values, tc) +{ + size_t i, j, k; + int c; + unsigned char buf[1+15+64+1]; + + for (i = 0; i < 16; i++) + for (j = 0; j < 64; j++) + for (k = 0; k <= j; k++) + for (c = 0; c <= UCHAR_MAX; c++) + do_values_test(buf + i + 1, j, k, c); +} + +ATF_TP_ADD_TCS(tp) +{ + void *dl_handle; + + dl_handle = dlopen(NULL, RTLD_LAZY); + memrchr_fn = dlsym(dl_handle, "test_memrchr"); + if (memrchr_fn == NULL) + memrchr_fn = memrchr; + + ATF_TP_ADD_TC(tp, null); + ATF_TP_ADD_TC(tp, not_found); + ATF_TP_ADD_TC(tp, found); + ATF_TP_ADD_TC(tp, values); + + return (atf_no_error()); +}