From patchwork Fri Apr 21 13:24:22 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: 68126 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 66599385701A for ; Fri, 21 Apr 2023 13:24:55 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 66599385701A DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1682083495; 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=UZQ7EppJfs7t3Sl7CNO8OYWf4IN/PfRpGWwOLpmouJ53Gaav4Ldoz41rshdPQonw+ h1s1qAmQBEajs+E70z+7CMZAGMKKSDK/uISPjWvAcuCAaMWGH3mWDNhgMPBxYl5neA zdykY2XXMXL8dGyWOGJx3ZIdCFcFamMwwiIuLBn0= 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 66BB33858422 for ; Fri, 21 Apr 2023 13:24:32 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 66BB33858422 Received: from mail-qt1-f198.google.com (mail-qt1-f198.google.com [209.85.160.198]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-42-jBcOx54FM6qZ899eenxTpw-1; Fri, 21 Apr 2023 09:24:30 -0400 X-MC-Unique: jBcOx54FM6qZ899eenxTpw-1 Received: by mail-qt1-f198.google.com with SMTP id d75a77b69052e-3ef44f554b1so11894731cf.1 for ; Fri, 21 Apr 2023 06:24:30 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1682083470; x=1684675470; 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=P9qK9dm+kScIG+5UqM2Zq3btmwCAdHevgBTq/b1KqcABixFZE8Q3IH225SG9BNi067 iHD71mObrMup3SKaxNZlk9hCyAUpT2aH2K7IR69JDREzJF8mdL2eIH+fm4uMgNburWrY C8Vp5Bmcq1HVSKRTjzgcnl4jzAje48icqbVLcX4+uvlr0xsQja0MiVJgNWQsY5zzpx5p 3ORjJI+tsQhKmaM0/qw/K4ApBleMlrWt4neVYnFacvzc+ZbcUtNCyR/OIcyGoaAU3mSY dCpCuD67qYjPSSir1AneEHTm5Y72sjYSZzCrcyGb3n72EmCxuCckiCKgdA9kPzufHT1d 3H1w== X-Gm-Message-State: AAQBX9cTWOrUmUXg2ljTbdQU553Q2hVkEw1WGWdHUVrjIWRjCN341BNu RR7cCyqyKCnJXwffmRi/SblcM4b+FuHb6HqrzWsaB+9FYrDTnWnjg+ny6e+gEYGjJXK4V+3akbI abuvmUCMGoYq3tlSp3DVP4Ld8GGDhxJHMKrB2BVU8F0ETYln4SrsjKXYGTm9ltUa501y443dhSs Yqb1DU X-Received: by 2002:a05:622a:594:b0:3e3:882d:4b47 with SMTP id c20-20020a05622a059400b003e3882d4b47mr7188077qtb.26.1682083470203; Fri, 21 Apr 2023 06:24:30 -0700 (PDT) X-Google-Smtp-Source: AKy350ZeYVaPcGKRbRKw0dK6wf7eeuYKyWaaInsXPNcTcSWKC8w5JFFw4yPsv+oXeZhNCH9OL/yC0w== X-Received: by 2002:a05:622a:594:b0:3e3:882d:4b47 with SMTP id c20-20020a05622a059400b003e3882d4b47mr7188048qtb.26.1682083469907; Fri, 21 Apr 2023 06:24:29 -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 w23-20020ac843d7000000b003d7e923736asm1328458qtn.6.2023.04.21.06.24.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 21 Apr 2023 06:24:28 -0700 (PDT) To: libc-alpha@sourceware.org Cc: Joe Simmons-Talbott , Adhemerval Zanella Subject: [PATCH v7 1/4] string: Allow use of test-string.h for non-ifunc implementations. Date: Fri, 21 Apr 2023 09:24:22 -0400 Message-Id: <20230421132425.2178020-2-josimmon@redhat.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230421132425.2178020-1-josimmon@redhat.com> References: <20230329150500.2886135-1-josimmon@redhat.com> <20230421132425.2178020-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" 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 Fri Apr 21 13:24:23 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: 68129 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 938383856240 for ; Fri, 21 Apr 2023 13:25:38 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 938383856240 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1682083538; 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=e3n9wfZpZT4zfv4MmdJwXxgU4czj0bnUHhFbuDDSdf2k+NtN0WYgKjThHxfU6NQUA LiUdeXoI/xZ2URFBdfano66ODiKkB8eHiMFM0K0AX7kudHkNjMyLVBebg6xZBKT4z5 +gSXaIL+UyoOyWsXjutiIpW5NNokMxzYDJLJNK7s= 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 F164B3857711 for ; Fri, 21 Apr 2023 13:24:33 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org F164B3857711 Received: from mail-qt1-f199.google.com (mail-qt1-f199.google.com [209.85.160.199]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-352-RA98HTUpOX2bEeI-5ARLUA-1; Fri, 21 Apr 2023 09:24:32 -0400 X-MC-Unique: RA98HTUpOX2bEeI-5ARLUA-1 Received: by mail-qt1-f199.google.com with SMTP id d75a77b69052e-3ed2ac02709so11483351cf.2 for ; Fri, 21 Apr 2023 06:24:32 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1682083472; x=1684675472; 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=RFdxE8min91NMX7jJhcR0UjKLc9rDC+lZFqD4prjuhyToYrbpDh7qQdBMBuPLQ4/mx IF2NEQYSqWR7SEg+dkJlPN1v4bXYnMAwczNQ9asvHQghXFtqvO17Sli/fGo5E4t+NaKM +27+zwCZs0Owc7kB3yAMgeJZilrAu4s6fZ/fWkZAMpGyZ1gWN5dyjVWc0gcH1CV7rq32 p+7aCba0ANTKLnID4FS1EGh4wfkevBiS1CYzFRQhbui1rvWG31k82XT9SqeI56O9W9vT 5YZfv0cSkhnHARwgO/9PjoPJiGwt+Hg6/RQOagzdcG2+Dll7jDCbcbHOjj7kxCQtfmWr m+SA== X-Gm-Message-State: AAQBX9eM2VoeMGowQJz9zg5flNFPndqn14RRhyOvEwIQ8hzr6zt7JrjR HDFb93cw85uis2Au0Ud1uCWFaUstoR5NOoQX/pq34YrDyrsVTeLz9XiKQ996UHmV1wGLP7zSrfs 9GkvIsMytGqPV80xscIuZMvsGwLXZLNZVXeGG53/kkPjx1G2t0xhdc2bv8C4L3xH3MfNGmZhQz4 QZ9WO3 X-Received: by 2002:ac8:5793:0:b0:3ef:5d8c:20d8 with SMTP id v19-20020ac85793000000b003ef5d8c20d8mr2622887qta.6.1682083471710; Fri, 21 Apr 2023 06:24:31 -0700 (PDT) X-Google-Smtp-Source: AKy350bIGrwkPD0FthkT19lbHn8J+z0+Y79Xs+3ZFzbGeYMKfs6bAxnJdiozyyD//68uUCy/7OWXlQ== X-Received: by 2002:ac8:5793:0:b0:3ef:5d8c:20d8 with SMTP id v19-20020ac85793000000b003ef5d8c20d8mr2622844qta.6.1682083471326; Fri, 21 Apr 2023 06:24:31 -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 w23-20020ac843d7000000b003d7e923736asm1328458qtn.6.2023.04.21.06.24.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 21 Apr 2023 06:24:30 -0700 (PDT) To: libc-alpha@sourceware.org Cc: Joe Simmons-Talbott , Adhemerval Zanella Subject: [PATCH v7 2/4] string: Add tests for strdup (BZ #30266) Date: Fri, 21 Apr 2023 09:24:23 -0400 Message-Id: <20230421132425.2178020-3-josimmon@redhat.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230421132425.2178020-1-josimmon@redhat.com> References: <20230329150500.2886135-1-josimmon@redhat.com> <20230421132425.2178020-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, 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 Fri Apr 21 13:24:24 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: 68128 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 66FDA3851C3C for ; Fri, 21 Apr 2023 13:25:38 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 66FDA3851C3C DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1682083538; bh=67U9cPOu9K9A2XBfU41AL8ngEnYtNnNMscxIROIEna4=; 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=oJIxbvnkjbrZZnn/u2frlVp89Cjw/zjvTKVAS6E6L17JGNmZgdxlamFrsNhrkt/kF ffmG8hk7ajfqfM5tQ3KaleLBl+n78BiMrXDbtjExya5x5bMn1uugCyCwHna9aJEent jR/83J6x2QPKoXhDgNXy+vqwH8C4adPO4DllTXiQ= 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 00535385840C for ; Fri, 21 Apr 2023 13:24:34 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 00535385840C Received: from mail-qt1-f199.google.com (mail-qt1-f199.google.com [209.85.160.199]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-439-Y93094kXMQmKwQFrFLgjLA-1; Fri, 21 Apr 2023 09:24:33 -0400 X-MC-Unique: Y93094kXMQmKwQFrFLgjLA-1 Received: by mail-qt1-f199.google.com with SMTP id d75a77b69052e-3ed80d7bf28so11881261cf.3 for ; Fri, 21 Apr 2023 06:24:33 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1682083472; x=1684675472; 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=67U9cPOu9K9A2XBfU41AL8ngEnYtNnNMscxIROIEna4=; b=cGwMLHnSSOzjk+oCCRVV0FOrPP+WFmzO8LZRKSbj2brSfD1hjgx0pzFNve2W7VJxZ+ un4n6GaPMfXojW3XkqErRfXnp2A7rekW3bI44NcFQvi7FKiELXxDL5fgnqPML54Czzp6 VqgG3ZwGWsIZysZ596OdN2lURRHrFIcpuTs0570Ac+lCODmIveNz2R15Fp8QSVsyjqsT b9DUjiZSywSFHyjqBodyMeO+aialdSWNSsu8KDH35KyVppmp72l7le+Fz51A85yS8dkn EnAqa8pVPpiwzukR+j+0Ek6Wyhy8K4RiFgtm5uHAmY4soLAKomZuN4UH9HU2hiL816Kq fvrg== X-Gm-Message-State: AAQBX9cJ9GkQuNLZ4LZN5bNTcuzJTPV3hJ8eljUwo+gZA/eWCYA/F45R 5CPWDv68ki2tbq23ttzfiWmmG23OYNInoCNciqMEEfWyTJYCFMdZQXTolc09m+ibv/6gbF4eGpf yo+dG4bjrav7RNQSXePdOjTQuAYhYaU+begKBT/EZhAC4l5nuwPBOT/G3ThukVXbaU/l8PU3i/n FQ8e51 X-Received: by 2002:a05:622a:490:b0:3ec:4292:bb8 with SMTP id p16-20020a05622a049000b003ec42920bb8mr7928199qtx.48.1682083472494; Fri, 21 Apr 2023 06:24:32 -0700 (PDT) X-Google-Smtp-Source: AKy350Zc3vJtjUNsAytpUrLzO1LTC9VuSGzJKmV1wIoOH8EpMs/STZ1NQ+v17oWXEJEcwvQgW8LH1A== X-Received: by 2002:a05:622a:490:b0:3ec:4292:bb8 with SMTP id p16-20020a05622a049000b003ec42920bb8mr7928169qtx.48.1682083472155; Fri, 21 Apr 2023 06:24:32 -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 w23-20020ac843d7000000b003d7e923736asm1328458qtn.6.2023.04.21.06.24.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 21 Apr 2023 06:24:31 -0700 (PDT) To: libc-alpha@sourceware.org Cc: Joe Simmons-Talbott Subject: [PATCH v7 3/4] string: Add tests for strndup (BZ #30266) Date: Fri, 21 Apr 2023 09:24:24 -0400 Message-Id: <20230421132425.2178020-4-josimmon@redhat.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230421132425.2178020-1-josimmon@redhat.com> References: <20230329150500.2886135-1-josimmon@redhat.com> <20230421132425.2178020-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, 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 | 198 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 199 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..4f5ccbe314 --- /dev/null +++ b/string/test-strndup.c @@ -0,0 +1,198 @@ +/* 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; + + 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; + char *p1 = (char *) (buf1 + page_size) - 512; + 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 = (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 Fri Apr 21 13:24:25 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: 68127 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 B371C3853824 for ; Fri, 21 Apr 2023 13:25:07 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org B371C3853824 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1682083507; 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=wS6IuictUIdXWpxfJBe2GQunJTw4KVBOgfagZsNrim9oIKZHwD3kEBiYsz0nN07tj Wt7PQFQX2xQdYlRlJNt2u50oQ+wPPgQEyz3YxF3dnesRtKtxjOjr2JCrCtCHg3/U45 RbbohwlIO5l+MsGcmqXiA81gLy41YATWPojnjLS4= 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 8E27C385773F for ; Fri, 21 Apr 2023 13:24:36 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 8E27C385773F Received: from mail-qk1-f200.google.com (mail-qk1-f200.google.com [209.85.222.200]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-508-foWLyUHkOz2FdxJxx4p3wg-1; Fri, 21 Apr 2023 09:24:35 -0400 X-MC-Unique: foWLyUHkOz2FdxJxx4p3wg-1 Received: by mail-qk1-f200.google.com with SMTP id af79cd13be357-74e0cfab3f0so308419485a.1 for ; Fri, 21 Apr 2023 06:24:35 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1682083474; x=1684675474; 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=enu4EwlMKq13jAKj1njeYGKf2uy7BhLSsacpZVTofC8G8gX9pNx3CvB4yqXiXy4mR5 1Q5PZ+bWQCNyZRbNOoH3DPf30A+lHdYV5+Zi6CI90jBbwndvy9KPr3LnpzjRYJ649o4j dK7R19vGsjD/Qocao3eXEO0aEAaaT7ZpBUgcbU1dAiQnJJmrxzgTFeoIihJDewGsa0mx xpF+ofIZ7Cw+Bj6DAK/xirPUEx0GjXkMywCPDvX8U/wVjcyqqEqBMWSevtd4i9kMCrdn 68RiUPOCFVdVWSobABSczZ5Kbdp4R3axwphWW6clffKbyt22/Qe4B1TH4MdKGIbua8Bz oU4w== X-Gm-Message-State: AAQBX9f4LpZyyFJdDV2HCoWzNu/aPZ0TcgD9ypGxeaPRIKrMDlhlmHLI +bdyxjdC3/khkSZTxRRp2izavzvqRWqTMKNN6TkEaoqFIzUsT5aBSXuhnjtH4EYNgCHOkU/T0v2 2bP3UUZqd8i7b3MzqgZ79PoIL5BP+gD+ytC9+/BSA+UrmsPEpRCzdrctI1miGZm9CgtFZ4p1RMT bCiq/4 X-Received: by 2002:a05:622a:1393:b0:3ef:1af1:135e with SMTP id o19-20020a05622a139300b003ef1af1135emr8775741qtk.44.1682083474296; Fri, 21 Apr 2023 06:24:34 -0700 (PDT) X-Google-Smtp-Source: AKy350ab9y7fkINfg/QAgQ4o/D0MOupWD84BQ9PRGViilx3EHNIUbT437Xm8UFTNf9htrmbnV7XVYg== X-Received: by 2002:a05:622a:1393:b0:3ef:1af1:135e with SMTP id o19-20020a05622a139300b003ef1af1135emr8775706qtk.44.1682083474083; Fri, 21 Apr 2023 06:24:34 -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 w23-20020ac843d7000000b003d7e923736asm1328458qtn.6.2023.04.21.06.24.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 21 Apr 2023 06:24:32 -0700 (PDT) To: libc-alpha@sourceware.org Cc: Joe Simmons-Talbott , Adhemerval Zanella Subject: [PATCH v7 4/4] wcsmbs: Add wcsdup() tests. (BZ #30266) Date: Fri, 21 Apr 2023 09:24:25 -0400 Message-Id: <20230421132425.2178020-5-josimmon@redhat.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230421132425.2178020-1-josimmon@redhat.com> References: <20230329150500.2886135-1-josimmon@redhat.com> <20230421132425.2178020-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" 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"