Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion cssselect/parser.py
Original file line number Diff line number Diff line change
Expand Up @@ -919,7 +919,7 @@ def _compile(pattern: str) -> MatchFunc:

def _replace_unicode(match: re.Match[str]) -> str:
codepoint = int(match.group(1), 16)
if codepoint > sys.maxunicode:
if codepoint > sys.maxunicode or 0xD800 <= codepoint <= 0xDFFF:
codepoint = 0xFFFD
return chr(codepoint)

Expand Down
1 change: 1 addition & 0 deletions tests/test_cssselect.py
Original file line number Diff line number Diff line change
Expand Up @@ -213,6 +213,7 @@ def test_pseudo_repr(css: str) -> str:
assert parse_one("*") == ("Element[*]", None)
assert parse_one(":empty") == ("Pseudo[Element[*]:empty]", None)
assert parse_one(":scope") == ("Pseudo[Element[*]:scope]", None)
assert parse_one(":\\DDDD") == ('Pseudo[Element[*]:\ufffd]', None)

# Special cases for CSS 2.1 pseudo-elements
assert parse_one(":BEfore") == ("Element[*]", "before")
Expand Down
Loading