[Extensions] Robustly handle UTF8 characters in URLPattern::MatchesPath [chromium/src : main]

0 views
Skip to first unread message

Devlin Cronin (Gerrit)

unread,
Aug 14, 2026, 1:23:54 PM (2 days ago) Aug 14
to Devlin Cronin, Andrea Orru, Chromium LUCI CQ, chromium...@chromium.org, chromium-a...@chromium.org, extension...@chromium.org
Attention needed from Andrea Orru

New activity on the change

Open in Gerrit

Related details

Attention is currently required from:
  • Andrea Orru
Submit Requirements:
  • requirement satisfiedCode-Coverage
  • requirement satisfiedCode-Owners
  • requirement is not satisfiedCode-Review
  • requirement is not satisfiedReview-Enforcement
Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
Gerrit-MessageType: comment
Gerrit-Project: chromium/src
Gerrit-Branch: main
Gerrit-Change-Id: I4220793773e001ad3e798834db96b0fe0f4aaf75
Gerrit-Change-Number: 8258871
Gerrit-PatchSet: 1
Gerrit-Owner: Devlin Cronin <rdevlin...@chromium.org>
Gerrit-Reviewer: Andrea Orru <andre...@chromium.org>
Gerrit-Reviewer: Devlin Cronin <rdevlin...@chromium.org>
Gerrit-Attention: Andrea Orru <andre...@chromium.org>
Gerrit-Comment-Date: Fri, 14 Aug 2026 17:23:40 +0000
Gerrit-HasComments: No
Gerrit-Has-Labels: No
satisfied_requirement
unsatisfied_requirement
open
diffy

Andrea Orru (Gerrit)

unread,
Aug 14, 2026, 1:47:27 PM (2 days ago) Aug 14
to Devlin Cronin, Chromium LUCI CQ, chromium...@chromium.org, chromium-a...@chromium.org, extension...@chromium.org
Attention needed from Devlin Cronin

Andrea Orru added 2 comments

File extensions/common/url_pattern.cc
Line 634, Patchset 1 (Latest): // Unlike the case-sensitive check above, a fallback to the raw strings is not
Andrea Orru . unresolved

But as a result, when `case_sensitive == false`, different invalid byte sequences collide and wrongly match.

File extensions/common/url_pattern_unittest.cc
Line 1455, Patchset 1 (Latest): EXPECT_FALSE(pattern.MatchesPath("/foo%E2bar"));
Andrea Orru . unresolved

For the reason I explained above, if you add this check it will fail:

`EXPECT_FALSE(pattern.MatchesPath("/foo%E2bar", /*case_sensitive=*/false));`

Open in Gerrit

Related details

Attention is currently required from:
  • Devlin Cronin
Submit Requirements:
    • requirement satisfiedCode-Coverage
    • requirement satisfiedCode-Owners
    • requirement is not satisfiedCode-Review
    • requirement is not satisfiedNo-Unresolved-Comments
    • requirement is not satisfiedReview-Enforcement
    Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
    Gerrit-MessageType: comment
    Gerrit-Project: chromium/src
    Gerrit-Branch: main
    Gerrit-Change-Id: I4220793773e001ad3e798834db96b0fe0f4aaf75
    Gerrit-Change-Number: 8258871
    Gerrit-PatchSet: 1
    Gerrit-Owner: Devlin Cronin <rdevlin...@chromium.org>
    Gerrit-Reviewer: Andrea Orru <andre...@chromium.org>
    Gerrit-Reviewer: Devlin Cronin <rdevlin...@chromium.org>
    Gerrit-Attention: Devlin Cronin <rdevlin...@chromium.org>
    Gerrit-Comment-Date: Fri, 14 Aug 2026 17:47:13 +0000
    Gerrit-HasComments: Yes
    Gerrit-Has-Labels: No
    satisfied_requirement
    unsatisfied_requirement
    open
    diffy

    Devlin Cronin (Gerrit)

    unread,
    Aug 14, 2026, 4:15:59 PM (2 days ago) Aug 14
    to Devlin Cronin, Andrea Orru, Chromium LUCI CQ, chromium...@chromium.org, chromium-a...@chromium.org, extension...@chromium.org
    Attention needed from Andrea Orru

    Devlin Cronin added 3 comments

    File extensions/common/url_pattern.cc
    Line 605, Patchset 2 (Latest): if (unescaped_pattern.length() == unescaped_test.length() + 2 &&
    base::StartsWith(unescaped_pattern, unescaped_test) &&
    base::EndsWith(unescaped_pattern, "/*")) {
    Devlin Cronin . unresolved

    I'll pull this out into a helper template in a followup

    Line 634, Patchset 1: // Unlike the case-sensitive check above, a fallback to the raw strings is not
    Andrea Orru . resolved

    But as a result, when `case_sensitive == false`, different invalid byte sequences collide and wrongly match.

    Devlin Cronin

    good catch. I had thought about that when writing, and forgot to follow up on it.

    Fixed... at the expense of making my head hurt.

    File extensions/common/url_pattern_unittest.cc
    Line 1455, Patchset 1: EXPECT_FALSE(pattern.MatchesPath("/foo%E2bar"));
    Andrea Orru . resolved

    For the reason I explained above, if you add this check it will fail:

    `EXPECT_FALSE(pattern.MatchesPath("/foo%E2bar", /*case_sensitive=*/false));`

    Devlin Cronin

    Fixed

    Open in Gerrit

    Related details

    Attention is currently required from:
    • Andrea Orru
    Submit Requirements:
    • requirement satisfiedCode-Coverage
    • requirement satisfiedCode-Owners
    • requirement is not satisfiedCode-Review
    • requirement is not satisfiedNo-Unresolved-Comments
    • requirement is not satisfiedReview-Enforcement
    Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
    Gerrit-MessageType: comment
    Gerrit-Project: chromium/src
    Gerrit-Branch: main
    Gerrit-Change-Id: I4220793773e001ad3e798834db96b0fe0f4aaf75
    Gerrit-Change-Number: 8258871
    Gerrit-PatchSet: 2
    Gerrit-Owner: Devlin Cronin <rdevlin...@chromium.org>
    Gerrit-Reviewer: Andrea Orru <andre...@chromium.org>
    Gerrit-Reviewer: Devlin Cronin <rdevlin...@chromium.org>
    Gerrit-Attention: Andrea Orru <andre...@chromium.org>
    Gerrit-Comment-Date: Fri, 14 Aug 2026 20:15:47 +0000
    Gerrit-HasComments: Yes
    Gerrit-Has-Labels: No
    Comment-In-Reply-To: Andrea Orru <andre...@chromium.org>
    satisfied_requirement
    unsatisfied_requirement
    open
    diffy

    Andrea Orru (Gerrit)

    unread,
    Aug 14, 2026, 4:42:46 PM (2 days ago) Aug 14
    to Devlin Cronin, Chromium LUCI CQ, chromium...@chromium.org, chromium-a...@chromium.org, extension...@chromium.org
    Attention needed from Devlin Cronin

    Andrea Orru voted and added 1 comment

    Votes added by Andrea Orru

    Code-Review+1

    1 comment

    File extensions/common/url_pattern.cc
    Line 605, Patchset 2 (Latest): if (unescaped_pattern.length() == unescaped_test.length() + 2 &&
    base::StartsWith(unescaped_pattern, unescaped_test) &&
    base::EndsWith(unescaped_pattern, "/*")) {
    Devlin Cronin . resolved

    I'll pull this out into a helper template in a followup

    Andrea Orru

    Acknowledged

    Open in Gerrit

    Related details

    Attention is currently required from:
    • Devlin Cronin
    Submit Requirements:
      • requirement satisfiedCode-Coverage
      • requirement satisfiedCode-Owners
      • requirement satisfiedCode-Review
      • requirement satisfiedReview-Enforcement
      Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
      Gerrit-MessageType: comment
      Gerrit-Project: chromium/src
      Gerrit-Branch: main
      Gerrit-Change-Id: I4220793773e001ad3e798834db96b0fe0f4aaf75
      Gerrit-Change-Number: 8258871
      Gerrit-PatchSet: 2
      Gerrit-Owner: Devlin Cronin <rdevlin...@chromium.org>
      Gerrit-Reviewer: Andrea Orru <andre...@chromium.org>
      Gerrit-Reviewer: Devlin Cronin <rdevlin...@chromium.org>
      Gerrit-Attention: Devlin Cronin <rdevlin...@chromium.org>
      Gerrit-Comment-Date: Fri, 14 Aug 2026 20:42:30 +0000
      Gerrit-HasComments: Yes
      Gerrit-Has-Labels: Yes
      Comment-In-Reply-To: Devlin Cronin <rdevlin...@chromium.org>
      satisfied_requirement
      open
      diffy

      Devlin Cronin (Gerrit)

      unread,
      Aug 14, 2026, 5:04:44 PM (2 days ago) Aug 14
      to Devlin Cronin, Chromium LUCI CQ, chromium...@chromium.org, chromium-a...@chromium.org, extension...@chromium.org

      Devlin Cronin voted and added 1 comment

      Votes added by Devlin Cronin

      Commit-Queue+2

      1 comment

      Patchset-level comments
      File-level comment, Patchset 2 (Latest):
      Devlin Cronin . resolved

      Thanks, Andrea!

      Open in Gerrit

      Related details

      Attention set is empty
      Submit Requirements:
      • requirement satisfiedCode-Coverage
      • requirement satisfiedCode-Owners
      • requirement satisfiedCode-Review
      • requirement satisfiedReview-Enforcement
      Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
      Gerrit-MessageType: comment
      Gerrit-Project: chromium/src
      Gerrit-Branch: main
      Gerrit-Change-Id: I4220793773e001ad3e798834db96b0fe0f4aaf75
      Gerrit-Change-Number: 8258871
      Gerrit-PatchSet: 2
      Gerrit-Owner: Devlin Cronin <rdevlin...@chromium.org>
      Gerrit-Reviewer: Andrea Orru <andre...@chromium.org>
      Gerrit-Reviewer: Devlin Cronin <rdevlin...@chromium.org>
      Gerrit-Comment-Date: Fri, 14 Aug 2026 21:04:31 +0000
      Gerrit-HasComments: Yes
      Gerrit-Has-Labels: Yes
      satisfied_requirement
      open
      diffy

      Chromium LUCI CQ (Gerrit)

      unread,
      Aug 14, 2026, 7:53:27 PM (2 days ago) Aug 14
      to Devlin Cronin, Andrea Orru, chromium...@chromium.org, chromium-a...@chromium.org, extension...@chromium.org

      Chromium LUCI CQ submitted the change

      Change information

      Commit message:
      [Extensions] Robustly handle UTF8 characters in URLPattern::MatchesPath

      Add more robust handling for UTF8 matching in URLPattern paths. This
      includes:
      * Matching UTF8 characters when checking for /* variants
      * Matching incomplete / invalid UTF8 characters
      * Matching UTF8 characters in both case-sensitive and case-
      insensitive variants (instead of just case-insensitive)

      Add various unit tests for the above.

      Among other things, this fixes utf8 paths for web-accessible resources.
      Fixed: 545512660
      Change-Id: I4220793773e001ad3e798834db96b0fe0f4aaf75
      Reviewed-by: Andrea Orru <andre...@chromium.org>
      Commit-Queue: Devlin Cronin <rdevlin...@chromium.org>
      Cr-Commit-Position: refs/heads/main@{#1680027}
      Files:
      • M chrome/browser/extensions/web_accessible_resources_browsertest.cc
      • M extensions/common/url_pattern.cc
      • M extensions/common/url_pattern_unittest.cc
      Change size: M
      Delta: 3 files changed, 211 insertions(+), 32 deletions(-)
      Branch: refs/heads/main
      Submit Requirements:
      • requirement satisfiedCode-Review: +1 by Andrea Orru
      Open in Gerrit
      Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
      Gerrit-MessageType: merged
      Gerrit-Project: chromium/src
      Gerrit-Branch: main
      Gerrit-Change-Id: I4220793773e001ad3e798834db96b0fe0f4aaf75
      Gerrit-Change-Number: 8258871
      Gerrit-PatchSet: 3
      Gerrit-Owner: Devlin Cronin <rdevlin...@chromium.org>
      Gerrit-Reviewer: Andrea Orru <andre...@chromium.org>
      Gerrit-Reviewer: Chromium LUCI CQ <chromiu...@luci-project-accounts.iam.gserviceaccount.com>
      Gerrit-Reviewer: Devlin Cronin <rdevlin...@chromium.org>
      open
      diffy
      satisfied_requirement
      Reply all
      Reply to author
      Forward
      0 new messages