From patchwork Thu Apr 20 16:54:55 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Joe Simmons-Talbott X-Patchwork-Id: 68083 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 4480F3858433 for ; Thu, 20 Apr 2023 16:57:04 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 4480F3858433 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1682009824; bh=jgilcCbCl+XdzV5Ey4xrRVJ3KgN0O+5U6u0PYjsdDdM=; 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=WtdE95BJS210US0Mac3wQlSrZcA9m1wiGeJVCQT9AZGt5h1U4Cw/BL870k5uIev6s gGeBvESkT24+I1wk+pswdG/cSkz79dbIQ74Pe7DYKvFrPKQID+6sDS0Q/hCUo0FmFK HrmbyduZaik/YsPJx5MLpDnN7YAWN4pvsHC8avA0= 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.129.124]) by sourceware.org (Postfix) with ESMTPS id E6F663857BB2 for ; Thu, 20 Apr 2023 16:55:11 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org E6F663857BB2 Received: from mail-qk1-f197.google.com (mail-qk1-f197.google.com [209.85.222.197]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-531-59OSj_BEOL67rvA8L6AmFw-1; Thu, 20 Apr 2023 12:55:03 -0400 X-MC-Unique: 59OSj_BEOL67rvA8L6AmFw-1 Received: by mail-qk1-f197.google.com with SMTP id af79cd13be357-74de74a90e7so128228585a.0 for ; Thu, 20 Apr 2023 09:55:03 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1682009702; x=1684601702; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=jgilcCbCl+XdzV5Ey4xrRVJ3KgN0O+5U6u0PYjsdDdM=; b=fEH8LDdrm/2mXZkOM4KZwNCphJ1epZBES+GnzY03s+u7dJAFu5lX3BYgPbTGt8RfHI 5sePxHzDeW+97iFaOcLGqSqegn6NV2aHZSRe+WWklfgO5KOOUFG+EiD7zcl/LrFOtCXx /jS1qKgIY5BQU7rxf3b/CWlygm7DRHqLNkRvRbcL2WKJB6cG5QKajgiEC6o3oROvJWWG J7N/EUChR4mmS5HDp9wft4cC+05ZnivBsvNBOvbHgCyeBUcETQAbTdj/rSkSFaqjUN58 30QuCnG+3rs8iRyuNF+AEvZRfT0AdszkliL0/XLl/8IId8hEnWFqIg6k4s3kObMwwpzW /lLg== X-Gm-Message-State: AAQBX9fyrxnKtYPc0StUR6bFVsDglBt2+9g9cl/2wvewHCFkx64xiHiY JHqCFwntayYmpRH1EFevWrWTKvWY8oFsXyMTqQo6YCE4wMIpQu39qiVShTeaIOBEm/WOkDfnGBH SzPGy2KiXFf1YeHYxqowXD/StHWun1XzD9w3pwxhlVKtF66lIIsJ7Tk/s12laJgD8KFsf3/iygC VpMmvh X-Received: by 2002:a05:6214:cae:b0:5a2:abf1:7d33 with SMTP id s14-20020a0562140cae00b005a2abf17d33mr3005411qvs.50.1682009702378; Thu, 20 Apr 2023 09:55:02 -0700 (PDT) X-Google-Smtp-Source: AKy350b9IIjWjowPsnz0QoPfBJAbLXGSB+SntVJLWwTPMN+bo7JbVDdRXkpIyhlj2HzyeP5lrTaNLQ== X-Received: by 2002:a05:6214:cae:b0:5a2:abf1:7d33 with SMTP id s14-20020a0562140cae00b005a2abf17d33mr3005385qvs.50.1682009702081; Thu, 20 Apr 2023 09:55:02 -0700 (PDT) Received: from oak.redhat.com (c-71-206-142-238.hsd1.va.comcast.net. [71.206.142.238]) by smtp.gmail.com with ESMTPSA id bq12-20020a05620a468c00b0074688c36facsm556496qkb.56.2023.04.20.09.55.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Apr 2023 09:55:01 -0700 (PDT) To: libc-alpha@sourceware.org Cc: Joe Simmons-Talbott , Adhemerval Zanella Subject: [PATCH v6 1/4] string: Allow use of test-string.h for non-ifunc implementations. Date: Thu, 20 Apr 2023 12:54:55 -0400 Message-Id: <20230420165458.2096593-2-josimmon@redhat.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230420165458.2096593-1-josimmon@redhat.com> References: <20230329150500.2886135-1-josimmon@redhat.com> <20230420165458.2096593-1-josimmon@redhat.com> MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com X-Spam-Status: No, score=-12.0 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, 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: Joe Simmons-Talbott via Libc-alpha From: Joe Simmons-Talbott Reply-To: Joe Simmons-Talbott Errors-To: libc-alpha-bounces+patchwork=sourceware.org@sourceware.org Sender: "Libc-alpha" Mark two variables as unused to silence warning when using test-string.h for non-ifunc implementations. Reviewed-by: Adhemerval Zanella --- string/test-string.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/string/test-string.h b/string/test-string.h index 41de973479..8bcb8afd0a 100644 --- a/string/test-string.h +++ b/string/test-string.h @@ -130,8 +130,8 @@ cmdline_process_function (int c) /* Increase size of FUNC_LIST if assert is triggered at run-time. */ static struct libc_ifunc_impl func_list[32]; static int func_count; -static int impl_count = -1; -static impl_t *impl_array; +static int impl_count __attribute__ ((unused)) = -1; +static impl_t *impl_array __attribute__ ((unused)); # define FOR_EACH_IMPL(impl, notall) \ impl_t *impl; \ From patchwork Thu Apr 20 16:54:56 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Joe Simmons-Talbott X-Patchwork-Id: 68081 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 6377B3857034 for ; Thu, 20 Apr 2023 16:55:46 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 6377B3857034 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1682009746; bh=s+K4kw8JPmDqwd3DhY4HNLs2UNYcAJt3vMWYaRDDKV8=; 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=o34pFqU4NwcKBnJt5ZVYWppaIgwux9VsbN9m/HvlPq2fjOePRIYiYIn85vEzUUMEP WVOF6LcBkk5iekTDK+jJqFbfpeU9ooztSNAfL0RLxZsMqAwXvg2/jakahaRM2w9+9h 1Aa/ayzp1pmFtuIMK2+LcgvhPIherCOIt2WVGLqY= 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.129.124]) by sourceware.org (Postfix) with ESMTPS id 168D0385842D for ; Thu, 20 Apr 2023 16:55:08 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 168D0385842D Received: from mail-qt1-f200.google.com (mail-qt1-f200.google.com [209.85.160.200]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-301-_hi_8Ob6PeyVT4QEDk1D3A-1; Thu, 20 Apr 2023 12:55:05 -0400 X-MC-Unique: _hi_8Ob6PeyVT4QEDk1D3A-1 Received: by mail-qt1-f200.google.com with SMTP id d75a77b69052e-3ef30a89abbso5909141cf.2 for ; Thu, 20 Apr 2023 09:55:04 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1682009704; x=1684601704; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=s+K4kw8JPmDqwd3DhY4HNLs2UNYcAJt3vMWYaRDDKV8=; b=EzgUfFOxuYeyVJL/g/4vurxT2ulb9nWYcHcYwVpTU7mvA1FYDgiHaNdzqX+EHUMSRa OO/mvPfbzu+CuBJfZFV8oyJ580p8Umzf1HiaTJay+vZ2VYjxaMGbf6EW7rI78kHSqTfQ AJ3/EIDMHNbXTU0cB3lUk7U5X0+WVuigzUCs+8+Tu61EGDKvOUjWXJgIiRb487r3cQBe zS5BXtXQN66iFYFgmNOgVa3PecZMckfo23mjPFFFKstm0eYK6J/hiyP3tSXEIDjak8r5 +r5yDgpOEqM7BdpuHOxxt8J7sh8r+F/nGGE+7pBo3Z1DrPSJAoqjK8p3l8mhFvxGyXbX Md8w== X-Gm-Message-State: AAQBX9cu727UAgCWsS4aGkVqDHYGrasTCT3k9bhjyX01LuRDi5Kj+TDR N68sRDKXADwQVg0ThXSsuBCzgQCF546H2uNEW5Qvy4mG5UwTMdvDLwUKjimLi9+bOF7AxwcQsrx MOjDko2VMngBnrV13cZJiqAxY4GGeplTju4JNNaso5yz5DwOmZrFRQKJlV+04hxe/D7OGWheu73 hUBEe4 X-Received: by 2002:ac8:5756:0:b0:3ef:2db1:6e75 with SMTP id 22-20020ac85756000000b003ef2db16e75mr3015880qtx.24.1682009703847; Thu, 20 Apr 2023 09:55:03 -0700 (PDT) X-Google-Smtp-Source: AKy350aDg/kIbexCO1VrPZlRb6mfYVHb+k7n8jLWABFw8EpW0m4C5zYEN5larEo/UR3j+a3Psny59w== X-Received: by 2002:ac8:5756:0:b0:3ef:2db1:6e75 with SMTP id 22-20020ac85756000000b003ef2db16e75mr3015857qtx.24.1682009703502; Thu, 20 Apr 2023 09:55:03 -0700 (PDT) Received: from oak.redhat.com (c-71-206-142-238.hsd1.va.comcast.net. [71.206.142.238]) by smtp.gmail.com with ESMTPSA id bq12-20020a05620a468c00b0074688c36facsm556496qkb.56.2023.04.20.09.55.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Apr 2023 09:55:02 -0700 (PDT) To: libc-alpha@sourceware.org Cc: Joe Simmons-Talbott , Adhemerval Zanella Subject: [PATCH v6 2/4] string: Add tests for strdup (BZ #30266) Date: Thu, 20 Apr 2023 12:54:56 -0400 Message-Id: <20230420165458.2096593-3-josimmon@redhat.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230420165458.2096593-1-josimmon@redhat.com> References: <20230329150500.2886135-1-josimmon@redhat.com> <20230420165458.2096593-1-josimmon@redhat.com> MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com X-Spam-Status: No, score=-11.9 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_H2, 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: Joe Simmons-Talbott via Libc-alpha From: Joe Simmons-Talbott Reply-To: Joe Simmons-Talbott Errors-To: libc-alpha-bounces+patchwork=sourceware.org@sourceware.org Sender: "Libc-alpha" Copy strcpy tests for strdup. Covers some basic testcases with random strings. Add a zero-length string testcase. Reviewed-by: Adhemerval Zanella --- string/Makefile | 1 + string/test-strdup.c | 201 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 202 insertions(+) create mode 100644 string/test-strdup.c diff --git a/string/Makefile b/string/Makefile index c84b49aaa5..472e318aea 100644 --- a/string/Makefile +++ b/string/Makefile @@ -157,6 +157,7 @@ tests := \ test-strcmp \ test-strcpy \ test-strcspn \ + test-strdup \ test-strlen \ test-strncasecmp \ test-strncat \ diff --git a/string/test-strdup.c b/string/test-strdup.c new file mode 100644 index 0000000000..9378c7eaf0 --- /dev/null +++ b/string/test-strdup.c @@ -0,0 +1,201 @@ +/* Test and measure strdup functions. + 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 + +#ifdef WIDE +# include +# define CHAR wchar_t +# define sfmt "ls" +# define BIG_CHAR WCHAR_MAX +# define SMALL_CHAR 1273 +# define STRCMP wcscmp +# define MEMCMP wmemcmp +# define MEMSET wmemset +# define TCS TEST_COMPARE_STRING_WIDE +#else +# define CHAR char +# define sfmt "s" +# define BIG_CHAR CHAR_MAX +# define SMALL_CHAR 127 +# define STRCMP strcmp +# define MEMCMP memcmp +# define MEMSET memset +# define TCS TEST_COMPARE_STRING +#endif + +#ifndef STRDUP_RESULT +# define STRDUP_RESULT(dst, len) dst +# define TEST_MAIN +# ifndef WIDE +# define TEST_NAME "strdup" +# else +# define TEST_NAME "wcsdup" +# endif +# include "test-string.h" +# ifndef WIDE +# define STRDUP strdup +# else +# define STRDUP wcsdup +# endif +#endif + +typedef CHAR *(*proto_t) (const CHAR *); + +static void +do_zero_len_test (void) +{ + CHAR src[1] = { '\0' }; + CHAR *dst = STRDUP (src); + + TCS (dst, src); + free (dst); +} + +static void +do_one_test (const CHAR *src, + size_t len __attribute__((unused))) +{ + CHAR *dst = STRDUP (src); + + if (STRCMP (dst, src) != 0) + { + error (0, 0, + "Wrong result in function %s dst \"%" sfmt "\" src \"%" sfmt "\"", + TEST_NAME, dst, src); + ret = 1; + free (dst); + return; + } + free (dst); +} + +static void +do_test (size_t align1, size_t align2, size_t len, int max_char) +{ + size_t i; + CHAR *s1; +/* For wcsdup: align1 and align2 here mean alignment not in bytes, + but in wchar_ts, in bytes it will equal to align * (sizeof (wchar_t)) + len for wcschr here isn't in bytes but it's number of wchar_t symbols. */ + align1 &= 7; + if ((align1 + len) * sizeof (CHAR) >= page_size) + return; + + align2 &= 7; + if ((align2 + len) * sizeof (CHAR) >= page_size) + return; + + s1 = (CHAR *) (buf1) + align1; + + for (i = 0; i < len; i++) + s1[i] = 32 + 23 * i % (max_char - 32); + s1[len] = 0; + + do_one_test (s1, len); +} + +static void +do_random_tests (void) +{ + size_t i, j, n, align1, align2, len; + CHAR *p1 = (CHAR *)(buf1 + page_size) - 512; + CHAR *res; + + for (n = 0; n < ITERATIONS; n++) + { + /* align1 and align2 are expressed as wchar_t and not in bytes for wide + char test, and thus it will be equal to align times wchar_t size. + + For non wide version we need to check all alignments from 0 to 63 + since some assembly implementations have separate prolog for alignments + more 48. */ + + align1 = random () & (63 / sizeof (CHAR)); + if (random () & 1) + align2 = random () & (63 / sizeof (CHAR)); + else + align2 = align1 + (random () & 24); + len = random () & 511; + j = align1; + if (align2 > j) + j = align2; + if (len + j >= 511) + len = 510 - j - (random () & 7); + j = len + align1 + 64; + if (j > 512) + j = 512; + for (i = 0; i < j; i++) + { + if (i == len + align1) + p1[i] = 0; + else + { + p1[i] = random () & BIG_CHAR; + if (i >= align1 && i < len + align1 && !p1[i]) + p1[i] = (random () & SMALL_CHAR) + 3; + } + } + + res = STRDUP(p1 + align1); + TCS (res, (p1 + align1)); + free (res); + } +} + + +int +test_main (void) +{ + size_t i; + + test_init (); + + printf ("%23s", ""); + printf ("\t%s", TEST_NAME); + putchar ('\n'); + + for (i = 0; i < 16; ++i) + { + do_test (0, 0, i, SMALL_CHAR); + do_test (0, 0, i, BIG_CHAR); + do_test (0, i, i, SMALL_CHAR); + do_test (i, 0, i, BIG_CHAR); + } + + for (i = 1; i < 8; ++i) + { + do_test (0, 0, 8 << i, SMALL_CHAR); + do_test (8 - i, 2 * i, 8 << i, SMALL_CHAR); + } + + for (i = 1; i < 8; ++i) + { + do_test (i, 2 * i, 8 << i, SMALL_CHAR); + do_test (2 * i, i, 8 << i, BIG_CHAR); + do_test (i, i, 8 << i, SMALL_CHAR); + do_test (i, i, 8 << i, BIG_CHAR); + } + + do_zero_len_test (); + do_random_tests (); + + return ret; +} + +#include From patchwork Thu Apr 20 16:54:57 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Joe Simmons-Talbott X-Patchwork-Id: 68082 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id EB28A385734E for ; Thu, 20 Apr 2023 16:56:19 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org EB28A385734E DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1682009780; bh=i+7AtU6MlTOfk5OVmF0s+o3wc2xXUt9EddryY1faokE=; 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=Equ0B2TwyyEwx9e7INuTxD9JvG+XXS33lXz4hnPhPuEPwFO4jhtGtzwv8l+P46Z0N 5xSKUb5NDiW/akx0VNmEpDiiwbaper8FIuXo9eZL2tBa56FBAWMAQxhZj1x1EmILti oaI/gNZFkowz18bXQMHjSl/e53IpFZ4yXIWADx6k= 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.129.124]) by sourceware.org (Postfix) with ESMTPS id 5888E3858C2B for ; Thu, 20 Apr 2023 16:55:07 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 5888E3858C2B Received: from mail-qv1-f72.google.com (mail-qv1-f72.google.com [209.85.219.72]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-373-VRvBP8cgPqmXor5u2ukvhw-1; Thu, 20 Apr 2023 12:55:05 -0400 X-MC-Unique: VRvBP8cgPqmXor5u2ukvhw-1 Received: by mail-qv1-f72.google.com with SMTP id 6a1803df08f44-5ef435ed39aso12760726d6.2 for ; Thu, 20 Apr 2023 09:55:05 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1682009705; x=1684601705; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=i+7AtU6MlTOfk5OVmF0s+o3wc2xXUt9EddryY1faokE=; b=UVJGi3s0+wrjo2va5AJiJ1ssUDACJ3PhcqZAT1X0hbBz4NNgvMY5tqZtFHl3x8K84B zwU37SnvkRbJd2TZk3p0l11U9vWFY2lSsI5X/d7kzbyxigVhFW1A7Ce0JeBztJvzQJDI /UOFrsA+vE1p/HN+YPuoWYiuXbVXcoviM61pk8SNpgNCVHYAudr19/hJE1vC501isfk0 afXctH55jvjXR9SuZ5oBx7YM0lT4lYjOHtPWVURylC2mx0QPvvYvSwW4QeqEvbcfXpEG U9j9veiHutXThCnh3IXAKGcp4JB6iYO4DfK+zTUm35iN6pyLqfNXbVlhBcIWp1lJ1Ldk Jrjw== X-Gm-Message-State: AAQBX9elJh1DEou3IPm1oaBBvJLbfRBGpKfRgZUVm7N40ByQlHWbabAb tejRD7Z5hdMSTNAtbckW6ylxImwvoRNH8kJx3WLCdqintok50F9nW3NAnkBPhG7zx3JwREpEzqa tGWh0HQcNBE53qFiYgyCZDgEcG8cBk4CjARvaNwbsu7OlKGH3iv5QS4WqGhYCqLJjW4f66xzBu6 jqXgf1 X-Received: by 2002:ad4:5ceb:0:b0:5f0:128f:2a66 with SMTP id iv11-20020ad45ceb000000b005f0128f2a66mr3497082qvb.28.1682009704675; Thu, 20 Apr 2023 09:55:04 -0700 (PDT) X-Google-Smtp-Source: AKy350ZqfopJErx1goRCR/Z80NbW8QtOZeyt8/maObgdsY3I+XPCDFOelFJe+uooExiykoMS43l0xA== X-Received: by 2002:ad4:5ceb:0:b0:5f0:128f:2a66 with SMTP id iv11-20020ad45ceb000000b005f0128f2a66mr3497042qvb.28.1682009704334; Thu, 20 Apr 2023 09:55:04 -0700 (PDT) Received: from oak.redhat.com (c-71-206-142-238.hsd1.va.comcast.net. [71.206.142.238]) by smtp.gmail.com with ESMTPSA id bq12-20020a05620a468c00b0074688c36facsm556496qkb.56.2023.04.20.09.55.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Apr 2023 09:55:03 -0700 (PDT) To: libc-alpha@sourceware.org Cc: Joe Simmons-Talbott Subject: [PATCH v6 3/4] string: Add tests for strndup (BZ #30266) Date: Thu, 20 Apr 2023 12:54:57 -0400 Message-Id: <20230420165458.2096593-4-josimmon@redhat.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230420165458.2096593-1-josimmon@redhat.com> References: <20230329150500.2886135-1-josimmon@redhat.com> <20230420165458.2096593-1-josimmon@redhat.com> MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com X-Spam-Status: No, score=-11.9 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_H2, 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: Joe Simmons-Talbott via Libc-alpha From: Joe Simmons-Talbott Reply-To: Joe Simmons-Talbott Errors-To: libc-alpha-bounces+patchwork=sourceware.org@sourceware.org Sender: "Libc-alpha" Copy strncpy tests for strndup. Covers some basic testcases with random strings. Remove tests that set the destination's bytes and checked the resulting buffer's bytes. Remove wide character test support since wcsndup() doesn't exist. --- string/Makefile | 1 + string/test-strndup.c | 200 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 201 insertions(+) create mode 100644 string/test-strndup.c diff --git a/string/Makefile b/string/Makefile index 472e318aea..2eef6f1dfc 100644 --- a/string/Makefile +++ b/string/Makefile @@ -163,6 +163,7 @@ tests := \ test-strncat \ test-strncmp \ test-strncpy \ + test-strndup \ test-strnlen \ test-strpbrk \ test-strrchr \ diff --git a/string/test-strndup.c b/string/test-strndup.c new file mode 100644 index 0000000000..841145dc92 --- /dev/null +++ b/string/test-strndup.c @@ -0,0 +1,200 @@ +/* Test strndup functions. + 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 + +#define TEST_MAIN +#include "test-string.h" + +static void +do_one_test (const char *src, size_t len, size_t n) +{ + char *dst = strndup(src, n); + size_t s = (len > n ? n: len) * sizeof (char); + + TEST_COMPARE_BLOB(dst, s, src, s); +} + +static void +do_test (size_t align1, size_t align2, size_t len, size_t n, int max_char) +{ + size_t i; + char *s1; + + align1 &= 7; + if ((align1 + len) * sizeof (char) >= page_size) + return; + + align2 &= 7; + if ((align2 + len) * sizeof (char) >= page_size) + return; + + s1 = (char *) (buf1) + align1; + + for (i = 0; i < len; ++i) + s1[i] = 32 + 23 * i % (max_char - 32); + s1[len] = 0; + for (i = len + 1; (i + align1) * sizeof (char) < page_size && i < len + 64; + ++i) + s1[i] = 32 + 32 * i % (max_char - 32); + + do_one_test (s1, len, n); +} + +static void +do_page_tests (void) +{ + char *s1; + const size_t maxoffset = 64; + + /* Put s1 at the maxoffset from the edge of buf1's last page. */ + s1 = (char *) buf1 + BUF1PAGES * page_size / sizeof (char) - maxoffset; + /* s2 needs room to put a string with size of maxoffset + 1 at s2 + + (maxoffset - 1). */ + + memset (s1, 'a', maxoffset - 1); + s1[maxoffset - 1] = '\0'; + + /* Both strings are bounded to a page with read/write access and the next + page is protected with PROT_NONE (meaning that any access outside of the + page regions will trigger an invalid memory access). + + The loop copies the string s1 for all possible offsets up to maxoffset + for both inputs with a size larger than s1 (so memory access outside the + expected memory regions might trigger invalid access). */ + + for (size_t off1 = 0; off1 < maxoffset; off1++) + for (size_t off2 = 0; off2 < maxoffset; off2++) + do_one_test (s1 + off1, maxoffset - off1 - 1, + maxoffset + (maxoffset - off2)); +} + +static void +do_random_tests (void) +{ + size_t i, j, n, align1, align2, len, size, mode; + unsigned char *p1 = (unsigned char *) (buf1 + page_size) - 512; + unsigned char *res; + + for (n = 0; n < ITERATIONS; n++) + { + mode = random (); + if (mode & 1) + { + size = random () & 255; + align1 = 512 - size - (random () & 15); + if (mode & 2) + align2 = align1 - (random () & 24); + else + align2 = align1 - (random () & 31); + if (mode & 4) + { + j = align1; + align1 = align2; + align2 = j; + } + if (mode & 8) + len = size - (random () & 31); + else + len = 512; + if (len >= 512) + len = random () & 511; + } + else + { + align1 = random () & 31; + if (mode & 2) + align2 = random () & 31; + else + align2 = align1 + (random () & 24); + len = random () & 511; + j = align1; + if (align2 > j) + j = align2; + if (mode & 4) + { + size = random () & 511; + if (size + j > 512) + size = 512 - j - (random () & 31); + } + else + size = 512 - j; + if ((mode & 8) && len + j >= 512) + len = 512 - j - (random () & 7); + } + j = len + align1 + 64; + if (j > 512) + j = 512; + for (i = 0; i < j; i++) + { + if (i == len + align1) + p1[i] = 0; + else + { + p1[i] = random () & CHAR_MAX; + if (i >= align1 && i < len + align1 && !p1[i]) + p1[i] = (random () & 127) + 3; + } + } + + res = (unsigned char *) strndup ((char *) (p1 + align1), size); + j = len + 1; + if (size < j) + j = size; + TEST_COMPARE_BLOB (res, j, (char *) (p1 + align1), j); + free (res); + } +} + +int +test_main (void) +{ + size_t i; + + test_init (); + + printf ("%28s", ""); + printf ("\t%s", "strndup"); + putchar ('\n'); + + for (i = 1; i < 8; ++i) + { + do_test (i, i, 16, 16, 127); + do_test (i, i, 16, 16, CHAR_MAX); + do_test (i, 2 * i, 16, 16, 127); + do_test (2 * i, i, 16, 16, CHAR_MAX); + do_test (8 - i, 2 * i, 1 << i, 2 << i, 127); + do_test (2 * i, 8 - i, 2 << i, 1 << i, 127); + do_test (8 - i, 2 * i, 1 << i, 2 << i, CHAR_MAX); + do_test (2 * i, 8 - i, 2 << i, 1 << i, CHAR_MAX); + } + + for (i = 1; i < 8; ++i) + { + do_test (0, 0, 4 << i, 8 << i, 127); + do_test (0, 0, 16 << i, 8 << i, 127); + do_test (8 - i, 2 * i, 4 << i, 8 << i, 127); + do_test (8 - i, 2 * i, 16 << i, 8 << i, 127); + } + + do_random_tests (); + do_page_tests (); + return ret; +} + +#include From patchwork Thu Apr 20 16:54:58 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Joe Simmons-Talbott X-Patchwork-Id: 68080 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id B70853857036 for ; Thu, 20 Apr 2023 16:55:37 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org B70853857036 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1682009737; bh=AQ4NZjTAE8DOgnsaF8K020UMv4GOLVput+w6u5OC+bA=; 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=Sk81qC2yJuDfOYsfKZBFC/2W0Wgb+nv37wWcgnoikMMdHHjldGYv2hfRNXpIY2cr9 HTxqZ2QfsTlDrPakw8UqrkaQrd7aLI7dba9XKPmK/s8VswcVPCfZWG0dVuvaUw/Nvb Hko5DE1Zz7ygwoQfeyM1HxNhVXmNxbx7xnKOQN98= 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 CA0EB3858C00 for ; Thu, 20 Apr 2023 16:55:08 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org CA0EB3858C00 Received: from mail-qk1-f197.google.com (mail-qk1-f197.google.com [209.85.222.197]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-576-VXSWq0KVMqaf_jXdT8JvVg-1; Thu, 20 Apr 2023 12:55:07 -0400 X-MC-Unique: VXSWq0KVMqaf_jXdT8JvVg-1 Received: by mail-qk1-f197.google.com with SMTP id af79cd13be357-74e26504096so69280085a.3 for ; Thu, 20 Apr 2023 09:55:07 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1682009706; x=1684601706; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=AQ4NZjTAE8DOgnsaF8K020UMv4GOLVput+w6u5OC+bA=; b=XSSn+sNAELSXuAcxsws/P30duPuCfdaITnY08MoEXU7ttecCYSzRnQJRJ7v/T4YU+2 q8CpKZQomahjhev1YyFOpz56rmzIGo25AOJ+aeW3dJcgCp1RKfHmb4GGNZFK1h5hAbDz WVowoaNV4R82RCwaetTqMzwIdBMrZel6o6KR0VjkiG1ribM+7pEnXZ/2gwyrNTTeNqFT K0/P55htYCYYWS9ycaAJwuvkcsA6Ih9+aG8cVJYbfA4XC8DJQvBDGgP9I9llw47IhE5o ZVB3nsbVxlh5qIRgJG9wI6NC1j52Ox6YJ4Kout3sLXe/nOp/iqhZch2TFu1OoCp09L7/ QANA== X-Gm-Message-State: AAQBX9dZp6YzZ+YpEN6Fz37UhScdPPCV8iwoQu3+ya13gNH5aJSv3BHq vsHxeDAgbqyPu0xfV8s2yi/1Kfzvgw2R4nLLz8n05PeE/7t3BEpPZpFa78Y5w7s5ibc+6PTRNvs 5xdtihO+RHugdxTLL8Bc+JeS9apNhSjEwCt3HzzZKl0GF/1bpISuDsihzj3nxgQzxJPj0f/VyfD 45j1ct X-Received: by 2002:ac8:5e4d:0:b0:3e9:2f1b:c85b with SMTP id i13-20020ac85e4d000000b003e92f1bc85bmr154412qtx.51.1682009706243; Thu, 20 Apr 2023 09:55:06 -0700 (PDT) X-Google-Smtp-Source: AKy350bujZDms++YWVbzvRu+LYYi1hQuqpnUOGgwd4SDBxV/zejQkghbaNcmfbwajlraBezAi+d1bw== X-Received: by 2002:ac8:5e4d:0:b0:3e9:2f1b:c85b with SMTP id i13-20020ac85e4d000000b003e92f1bc85bmr154372qtx.51.1682009705867; Thu, 20 Apr 2023 09:55:05 -0700 (PDT) Received: from oak.redhat.com (c-71-206-142-238.hsd1.va.comcast.net. [71.206.142.238]) by smtp.gmail.com with ESMTPSA id bq12-20020a05620a468c00b0074688c36facsm556496qkb.56.2023.04.20.09.55.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Apr 2023 09:55:04 -0700 (PDT) To: libc-alpha@sourceware.org Cc: Joe Simmons-Talbott , Adhemerval Zanella Subject: [PATCH v6 4/4] wcsmbs: Add wcsdup() tests. (BZ #30266) Date: Thu, 20 Apr 2023 12:54:58 -0400 Message-Id: <20230420165458.2096593-5-josimmon@redhat.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230420165458.2096593-1-josimmon@redhat.com> References: <20230329150500.2886135-1-josimmon@redhat.com> <20230420165458.2096593-1-josimmon@redhat.com> MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com X-Spam-Status: No, score=-11.9 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, 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: Joe Simmons-Talbott via Libc-alpha From: Joe Simmons-Talbott Reply-To: Joe Simmons-Talbott Errors-To: libc-alpha-bounces+patchwork=sourceware.org@sourceware.org Sender: "Libc-alpha" Enable wide character testcases for wcsdup(). Reviewed-by: Adhemerval Zanella --- wcsmbs/Makefile | 2 +- wcsmbs/test-wcsdup.c | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) create mode 100644 wcsmbs/test-wcsdup.c diff --git a/wcsmbs/Makefile b/wcsmbs/Makefile index b12a3b0750..bd39335b0e 100644 --- a/wcsmbs/Makefile +++ b/wcsmbs/Makefile @@ -49,7 +49,7 @@ routines := wcscat wcschr wcscmp wcscpy wcscspn wcsdup wcslen wcsncat \ strop-tests := wcscmp wcsncmp wmemcmp wcslen wcschr wcsrchr wcscpy wcsnlen \ wcpcpy wcsncpy wcpncpy wcscat wcsncat wcschrnul wcsspn wcspbrk \ - wcscspn wmemchr wmemset + wcscspn wmemchr wmemset wcsdup tests := tst-wcstof wcsmbs-tst1 tst-wcsnlen tst-btowc tst-mbrtowc \ tst-wcrtomb tst-wcpncpy tst-mbsrtowcs tst-wchar-h tst-mbrtowc2 \ tst-c16c32-1 wcsatcliff tst-wcstol-locale tst-wcstod-nan-locale \ diff --git a/wcsmbs/test-wcsdup.c b/wcsmbs/test-wcsdup.c new file mode 100644 index 0000000000..e39e063d0b --- /dev/null +++ b/wcsmbs/test-wcsdup.c @@ -0,0 +1,2 @@ +#define WIDE 1 +#include "../string/test-strdup.c"