From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: X-Spam-Status: No, score=-4.2 required=3.0 tests=ALL_TRUSTED,AWL,BAYES_00, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF, T_SCC_BODY_TEXT_LINE shortcircuit=no autolearn=ham autolearn_force=no version=3.4.6 Received: from localhost (dcvr.yhbt.net [127.0.0.1]) by dcvr.yhbt.net (Postfix) with ESMTP id 0EA091F51B for ; Tue, 16 Jan 2024 11:52:56 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=80x24.org; s=selector1; t=1705405976; bh=H8eskY/Jwfl8f15it5OIWXsmtZxORQZpDi7Aht4nWlk=; h=From:To:Subject:Date:In-Reply-To:References:From; b=VdZFKTLGaBONoow99J8vTmXmtFSPZhwMkvPKvBWV+LbvSqJIT/Kb86p1GkGPcZ5Ie nAZi1UjPmRRpL2hH50zTaYPmgcuLKozoZUn0WRbQpoX42EjXcwFo3IqFm/CyprG/85 cX6eSlmCs8RCaSV1EXdwc3akMBnzqhsVoqurVpRs= From: Eric Wong To: meta@public-inbox.org Subject: [PATCH 4/5] config: glob2re: fix over-matching /**/foo Date: Tue, 16 Jan 2024 11:52:54 +0000 Message-ID: <20240116115255.3554317-5-e@80x24.org> In-Reply-To: <20240116115255.3554317-1-e@80x24.org> References: <20240116115255.3554317-1-e@80x24.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit List-Id: Noticed while adding wildcard support to WwwCoderepo... --- lib/PublicInbox/Config.pm | 2 +- t/config.t | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/PublicInbox/Config.pm b/lib/PublicInbox/Config.pm index 33c59ec7..b8d3c485 100644 --- a/lib/PublicInbox/Config.pm +++ b/lib/PublicInbox/Config.pm @@ -662,7 +662,7 @@ sub squote_maybe ($) { } my %re_map = ( '*' => '[^/]*?', '?' => '[^/]', - '/**' => '/.*', '**/' => '.*/', '/**/' => '/.*?', + '/**' => '/.*', '**/' => '.*/', '/**/' => '(?:/.*?/|/)', '[' => '[', ']' => ']', ',' => ',' ); sub glob2re ($) { diff --git a/t/config.t b/t/config.t index 975cf836..c41a42d3 100644 --- a/t/config.t +++ b/t/config.t @@ -296,8 +296,9 @@ is_deeply($glob2re->('\\\\{a,b}'), '\\\\\\\\(a|b)', 'fake escape brace'); is_deeply($glob2re->('**/foo'), '.*/foo', 'double asterisk start'); is_deeply($glob2re->('foo/**'), 'foo/.*', 'double asterisk end'); my $re = $glob2re->('a/**/b'); -is_deeply($re, 'a/.*?b', 'double asterisk middle'); +is_deeply($re, 'a(?:/.*?/|/)b', 'double asterisk middle'); like($_, qr!$re!, "a/**/b matches $_") for ('a/b', 'a/c/b', 'a/c/a/b'); +unlike($_, qr!$re!, "a/**/b doesn't match $_") for ('a/ab'); { my $w = '';