From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from tarta.nabijaczleweli.xyz (unknown [139.28.40.42]) by sourceware.org (Postfix) with ESMTP id 5565D3858C50 for ; Mon, 12 Jun 2023 00:47:58 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 5565D3858C50 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=nabijaczleweli.xyz Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=nabijaczleweli.xyz DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=nabijaczleweli.xyz; s=202305; t=1686530877; bh=bLJieH5r9uXKS1BNI6yUyaceWHg1hbVe4cadkL8CSpY=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=CBEQeSbb+zO8OwHXmJUUaCCFuaKGvVrYjecBWmjNWTUfhtR9qDYXzJhaaqv6m7jbT JY1n/3hKCh7MqCyQ+MDhAx1BnJCa2a/gt7LAlSaIKCLoHC5jZRRYGWKvOWIm6CWpZ+ 1bNqgteKdhj2lfYCWJcoXzo4C1iwWmHuR+Hw2AkV45X/cW6t0Agki5kj3pGWvDtPbA QuR6bJ48IE6YZbBjB4L9aEmuIixpkxuzGwjW3bObHwYAvj/rECVOpcOs3pMu1XtQ74 dRcqK5w6MLkdF33pWb5+KmMUlOC10QnpsFs+VL0fUSuCeuslDSvVV+UoLwmF1Zbf4a R5Smr3LhfQqPA== Received: from tarta.nabijaczleweli.xyz (unknown [192.168.1.250]) by tarta.nabijaczleweli.xyz (Postfix) with ESMTPSA id 4AA6A584; Mon, 12 Jun 2023 02:47:57 +0200 (CEST) Date: Mon, 12 Jun 2023 02:47:56 +0200 From: =?utf-8?B?0L3QsNCx?= To: Adhemerval Zanella Netto Cc: libc-alpha@sourceware.org, Carlos O'Donell Subject: [PATCH v7 3/3] posix: add test for REG_STARTEND Message-ID: <081705a028f41d488ff81dbe198674aa4df83b1c.1686530834.git.nabijaczleweli@nabijaczleweli.xyz> References: <4450a8f3-3774-5bbc-ebe2-64d8a25fdacc@linaro.org> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha512; protocol="application/pgp-signature"; boundary="ryu6n5jobkrfcyjc" Content-Disposition: inline In-Reply-To: <4450a8f3-3774-5bbc-ebe2-64d8a25fdacc@linaro.org> User-Agent: NeoMutt/20230517 X-Spam-Status: No, score=-10.5 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,KAM_INFOUSMEBIZ,PDS_RDNS_DYNAMIC_FP,RDNS_DYNAMIC,SPF_HELO_PASS,SPF_PASS,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 List-Id: --ryu6n5jobkrfcyjc Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable This test passes on NetBSD, the illumos gate, musl with https://www.openwall.com/lists/musl/2023/05/14/1, and now glibc. It's nothing revolutionary and the behaviour it tests is largely guaranteed by the 4.4BSD-Lite manual; nevertheless, it used to fail with tst-reg-startend.c: ^a: a^@c: no match$ tst-reg-startend.c: ^a: a^@c: wanted {1, 2}, got {1, 4}$ tst-reg-startend.c: ^a: abc: no match$ tst-reg-startend.c: ^a: abc: wanted {1, 2}, got {1, 4}$ tst-reg-startend.c: ^a.c$: a^@c: no match$ tst-reg-startend.c: ^a.c$: abc: no match$ tst-reg-startend.c: ^a.*c$: a^@c: no match$ tst-reg-startend.c: ^a.*c$: abc: no match$ tst-reg-startend.c: ^a[^c]c$: a^@c: no match$ tst-reg-startend.c: ^a[^c]c$: abc: no match$ tst-reg-startend.c: ^a..: a^@c: no match$ tst-reg-startend.c: ^a..: abc: no match$ tst-reg-startend.c: ..c: a^@c: no match$ Signed-off-by: Ahelenia Ziemia=C5=84ska --- posix/Makefile | 1 + posix/tst-reg-startend.c | 142 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 143 insertions(+) create mode 100644 posix/tst-reg-startend.c diff --git a/posix/Makefile b/posix/Makefile index e19b74cd67..abc0ff1f60 100644 --- a/posix/Makefile +++ b/posix/Makefile @@ -295,6 +295,7 @@ tests :=3D \ tst-posix_spawn-setsid \ tst-preadwrite \ tst-preadwrite64 \ + tst-reg-startend \ tst-regcomp-truncated \ tst-regex \ tst-regex2 \ diff --git a/posix/tst-reg-startend.c b/posix/tst-reg-startend.c new file mode 100644 index 0000000000..854d430676 --- /dev/null +++ b/posix/tst-reg-startend.c @@ -0,0 +1,142 @@ +/* This is free and unencumbered software released into the public domain. + + Anyone is free to copy, modify, publish, use, compile, sell, or + distribute this software, either in source code form or as a compiled + binary, for any purpose, commercial or non-commercial, and by any + means. + + In jurisdictions that recognize copyright laws, the author or authors + of this software dedicate any and all copyright interest in the + software to the public domain. We make this dedication for the benefit + of the public at large and to the detriment of our heirs and + successors. We intend this dedication to be an overt act of + relinquishment in perpetuity of all present and future rights to this + software under copyright law. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. */ + + +#include +#include +#include +#include +#include +#include +#include + + +static const regmatch_t bound =3D {1, 4}; + + +struct reg_res { + const char *regex; + regmatch_t result; +}; +static const struct reg_res reg_res_ac[] =3D { + {"^a", {1, 2}}, + {"c$", {3, 4}}, + {"^a.c$", {1, 4}}, + {"^a.*c$", {1, 4}}, + {"^a[^c]c$", {1, 4}}, + {"^a..", {1, 4}}, + {"..c", {1, 4}}, + {"[^z]c", {2, 4}}, + {} +}; +static const char *const data_ac[] =3D {"_a\0cdef", "_abcdef", NULL}; + +static const struct reg_res reg_res_aa[] =3D { + {"^", {1, 1}}, + {"^a", {1, 2}}, + {"a$", {3, 4}}, + {"^\\(a\\).\\1$", {1, 4}}, + {"^a[^a]*" , {1, 3}}, + {} +}; +static const char *const data_aa[] =3D {"_a\0adef", "_abadef", NULL}; + + +static void +testbunch (const struct reg_res *reg_reses, const char *const *const data) +{ +#define BASEERR(data) \ + support_record_failure (), \ + fprintf (stdout, __FILE__ ": %s: ", reg_reses->regex), \ + fwrite (data + bound.rm_so, 1, bound.rm_eo - bound.rm_so, stdout) + + for (; reg_reses->regex; ++reg_reses) + { + regex_t rgx; + assert (!regcomp (&rgx, reg_reses->regex, 0)); + + for (const char *const *dt =3D data; *dt; ++dt) + { + regmatch_t match =3D bound; + if (regexec (&rgx, *dt, 1, &match, REG_STARTEND)) + BASEERR(dt), fputs (": no match\n", stdout); + + if (memcmp(&match, ®_reses->result, sizeof (regmatch_t))) + BASEERR(dt), fprintf (stdout, ": wanted {%d, %d}, got {%d, %d}= \n", + (int)reg_reses->result.rm_so, + (int)reg_reses->result.rm_eo, + (int)match.rm_so, (int)match.rm_eo); + } + + regfree(&rgx); + } +} + + +struct mb_data_exp { + const char *data; + bool exp; +}; +static const struct mb_data_exp mb_data_exp[] =3D { + {"_aa=C4=87def", false}, + {"_a=C4=87def", true}, + {} +}; + +static void +testmb (void) +{ + regex_t rgx; + const struct reg_res reg_reses[] =3D {{"a=C4=87"}}; + assert (!regcomp (&rgx, reg_reses->regex, 0)); + + for (const struct mb_data_exp *de =3D mb_data_exp; de->data; ++de) + { + regmatch_t match =3D bound; + if (regexec (&rgx, de->data, 1, &match, REG_STARTEND) =3D=3D de->exp) + BASEERR(de->data), fprintf (stdout, ": %s match\n", + de->exp ? "no" : "yes"); + + if (memcmp(&match, &bound, sizeof (regmatch_t))) + BASEERR(de->data), fprintf (stdout, ": wanted {%d, %d}, got {%d, %= d}\n", + (int)bound.rm_so, (int)bound.rm_eo, + (int)match.rm_so, (int)match.rm_eo); + } + + regfree(&rgx); +} + + +static int +do_test (void) +{ + assert (setlocale (LC_ALL, "C.UTF-8")); + + testbunch (reg_res_ac, data_ac); + testbunch (reg_res_aa, data_aa); + testmb (); + return 0; +} + + +#include --=20 2.39.2 --ryu6n5jobkrfcyjc Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEEfWlHToQCjFzAxEFjvP0LAY0mWPEFAmSGazsACgkQvP0LAY0m WPGyFQ//Vrg9GC9YKXedepWiTP4EcoMMQ0c430HI0gDySElzMhqUdVmBS701KFkY YHcl1Ua4T9WvCGJTMc0KHWoay2eCHH8B4gTIRGvUP7qH0iqYKF6TjnDU+LfYZncz 0UXMfo20kNA6rsIAyH11Q9eI+6r1UboU/3pD3z8J8EyZ54SAIJh2TDQjj8FUmqZp Q8p4VKU7VCIDpJ2Ru34Bc0uJLToTOdDIyR+pY4eV/D3c/Ln/h4TgoODIT6eYe2lP xrxOCuTkZHMBUkTYMJV25nfH/eVcbRXZRBB125xWl+zH4Mgvv8zrUrUAKrkmtTHb D2HYTiCg+LPflzR/ji/EnenSgbuJtFqA7fxHgom6IaC+cCBLkBACis/YKlOt6Yve 7i2T7x1wUKth3FF0L7i55HdmDmKFV8Jsu3UlipvUbFb4lSywG7R9pOeec8xllsfa QEsFqFmcWQ1kA0Bpv2GSRDyCCf5qCvlMQRlrDuR1xC+Y2GZB8LRCG8KBxb9c29/h VZY8uX+B8voUkc87NkzZldrbD+xCsxAuMcfe3Lf6Qk0wxdZlAWUQKj9bGD41waQQ CCct9lIs3yAKvmdhh3sVpznPfzm5d2Rv6LpMUOL4dcDBpdNGiwjERQCdJslqbqp0 dVMPIFyOxf3QShHkckwx/ZE3ptHOuiRGZSVGnSy/c2L11JSdKTE= =SYbh -----END PGP SIGNATURE----- --ryu6n5jobkrfcyjc--