mirror of
https://github.com/lightpanda-io/browser.git
synced 2026-03-22 04:34:44 +00:00
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.
This commit is contained in:
@@ -270,3 +270,27 @@
|
|||||||
testing.expectEqual('rect', document.querySelector('svg g rect').tagName);
|
testing.expectEqual('rect', document.querySelector('svg g rect').tagName);
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
<script id=special>
|
||||||
|
testing.expectEqual(null, document.querySelector('\\'));
|
||||||
|
|
||||||
|
testing.expectEqual(null, document.querySelector('div\\'));
|
||||||
|
testing.expectEqual(null, document.querySelector('.test-class\\'));
|
||||||
|
testing.expectEqual(null, document.querySelector('#byId\\'));
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<div class="café">Non-ASCII class 1</div>
|
||||||
|
<div class="日本語">Non-ASCII class 2</div>
|
||||||
|
<span id="niño">Non-ASCII ID 1</span>
|
||||||
|
<p id="🎨">Non-ASCII ID 2</p>
|
||||||
|
|
||||||
|
<script id=nonAsciiSelectors>
|
||||||
|
testing.expectEqual('Non-ASCII class 1', document.querySelector('.café').textContent);
|
||||||
|
testing.expectEqual('Non-ASCII class 2', document.querySelector('.日本語').textContent);
|
||||||
|
|
||||||
|
testing.expectEqual('Non-ASCII ID 1', document.querySelector('#niño').textContent);
|
||||||
|
testing.expectEqual('Non-ASCII ID 2', document.querySelector('#🎨').textContent);
|
||||||
|
|
||||||
|
testing.expectEqual('Non-ASCII class 1', document.querySelector('div.café').textContent);
|
||||||
|
testing.expectEqual('Non-ASCII ID 1', document.querySelector('span#niño').textContent);
|
||||||
|
</script>
|
||||||
|
|||||||
@@ -237,8 +237,9 @@ fn parsePart(self: *Parser, arena: Allocator, page: *Page) !Part {
|
|||||||
},
|
},
|
||||||
'[' => .{ .attribute = try self.attribute(arena, page) },
|
'[' => .{ .attribute = try self.attribute(arena, page) },
|
||||||
':' => .{ .pseudo_class = try self.pseudoClass(arena, page) },
|
':' => .{ .pseudo_class = try self.pseudoClass(arena, page) },
|
||||||
'a'...'z', 'A'...'Z', '_' => blk: {
|
'a'...'z', 'A'...'Z', '_', '\\', 0x80...0xFF => blk: {
|
||||||
const tag_name = try self.tag();
|
// Use parseIdentifier for full escape support
|
||||||
|
const tag_name = try self.parseIdentifier(arena, error.InvalidTagSelector);
|
||||||
if (tag_name.len > 256) {
|
if (tag_name.len > 256) {
|
||||||
return error.InvalidTagSelector;
|
return error.InvalidTagSelector;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user