From 3412ff94bcf557549478a29a5a5777f761ef90c2 Mon Sep 17 00:00:00 2001 From: Karl Seguin Date: Wed, 11 Feb 2026 14:37:20 +0800 Subject: [PATCH] Support a few more selector edge cases Trailing escape sequence (https://github.com/lightpanda-io/browser/issues/1515) and tags started with non-ascii letters. --- .../tests/document/query_selector.html | 24 +++++++++++++++++++ src/browser/webapi/selector/Parser.zig | 5 ++-- 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/src/browser/tests/document/query_selector.html b/src/browser/tests/document/query_selector.html index 91675b82..96179ede 100644 --- a/src/browser/tests/document/query_selector.html +++ b/src/browser/tests/document/query_selector.html @@ -270,3 +270,27 @@ testing.expectEqual('rect', document.querySelector('svg g rect').tagName); } + + + +
Non-ASCII class 1
+
Non-ASCII class 2
+Non-ASCII ID 1 +

Non-ASCII ID 2

+ + diff --git a/src/browser/webapi/selector/Parser.zig b/src/browser/webapi/selector/Parser.zig index a594f66f..fbedf17f 100644 --- a/src/browser/webapi/selector/Parser.zig +++ b/src/browser/webapi/selector/Parser.zig @@ -237,8 +237,9 @@ fn parsePart(self: *Parser, arena: Allocator, page: *Page) !Part { }, '[' => .{ .attribute = try self.attribute(arena, page) }, ':' => .{ .pseudo_class = try self.pseudoClass(arena, page) }, - 'a'...'z', 'A'...'Z', '_' => blk: { - const tag_name = try self.tag(); + 'a'...'z', 'A'...'Z', '_', '\\', 0x80...0xFF => blk: { + // Use parseIdentifier for full escape support + const tag_name = try self.parseIdentifier(arena, error.InvalidTagSelector); if (tag_name.len > 256) { return error.InvalidTagSelector; }