fix(http_parsing_utils.py): orjson can throw errors on some emoji's in text, default to json.loads

This commit is contained in:
Krrish Dholakia 2025-02-27 22:54:49 -08:00 committed by Ishaan Jaff
parent 94fa5c1e4b
commit d27929b774

View file

@ -42,7 +42,26 @@ async def _read_request_body(request: Optional[Request]) -> Dict:
if not body:
parsed_body = {}
else:
parsed_body = orjson.loads(body)
try:
parsed_body = orjson.loads(body)
except orjson.JSONDecodeError:
# Fall back to the standard json module which is more forgiving
# First decode bytes to string if needed
body_str = body.decode("utf-8") if isinstance(body, bytes) else body
# Replace invalid surrogate pairs
import re
# This regex finds incomplete surrogate pairs
body_str = re.sub(
r"[\uD800-\uDBFF](?![\uDC00-\uDFFF])", "", body_str
)
# This regex finds low surrogates without high surrogates
body_str = re.sub(
r"(?<![\uD800-\uDBFF])[\uDC00-\uDFFF]", "", body_str
)
parsed_body = json.loads(body_str)
# Cache the parsed result
_safe_set_request_parsed_body(request=request, parsed_body=parsed_body)