aleph-im/pyaleph

Problem: bigint in POST message makes GET messages.json return a 500

Opened this issue · 0 comments

A POST message was accepted containing a big integer. We should reject messages containing integers bigger than 2^53 (limit for valid JSON) as this breaks JSON serialization in the API.

[2023-09-13 10:14:26 +0000] [106] [ERROR] Error handling request
OverflowError: int too big to convert

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/opt/venv/lib/python3.11/site-packages/aiohttp/web_protocol.py", line 435, in _handle_request
    resp = await request_handler(request)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/venv/lib/python3.11/site-packages/sentry_sdk/integrations/aiohttp.py", line 126, in sentry_app_handle
    reraise(*_capture_exception(hub))
  File "/opt/venv/lib/python3.11/site-packages/sentry_sdk/_compat.py", line 60, in reraise
    raise value
  File "/opt/venv/lib/python3.11/site-packages/sentry_sdk/integrations/aiohttp.py", line 116, in sentry_app_handle
    response = await old_handle(self, request)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/venv/lib/python3.11/site-packages/aiohttp/web_app.py", line 504, in _handle
    resp = await handler(request)
           ^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/pyaleph/src/aleph/web/controllers/messages.py", line 231, in view_messages_list
    return format_response(
           ^^^^^^^^^^^^^^^^
  File "/opt/pyaleph/src/aleph/web/controllers/messages.py", line 203, in format_response
    return web.json_response(text=aleph_json.dumps(response).decode("utf-8"))
                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/pyaleph/src/aleph/toolkit/json.py", line 37, in dumps
    return orjson.dumps(obj)
           ^^^^^^^^^^^^^^^^^
TypeError: Integer exceeds 64-bit range

The problematic message. See "random_number": 65810885944677670000000000000000000000000000000000000000000000000000000000000.