Skip to content

[WebSocketFrame] Exception when building frames with very large payloads #912

Open
@abhinavsingh

Description

@abhinavsingh

Describe the bug
When building a WebSocket frame with very large payload (8 bytes represented as 64-bit unsigned integer as payload length), following exception is seen:

2021-12-27 21:11:52,797 - pid:75191 [E] base_events.default_exception_handler:1729 - Task exception was never retrieved
future: <Task finished name='Task-1' coro=<Threadless._run_forever() done, defined at /Users/abhinavsingh/Dev/proxy.py/proxy/core/acceptor/threadless.py:346> exception=error('pack expected 3 items for packing (got 2)')>
Traceback (most recent call last):
  File "/Users/abhinavsingh/Dev/proxy.py/proxy/core/acceptor/threadless.py", line 350, in _run_forever
    if await self._run_once():
  File "/Users/abhinavsingh/Dev/proxy.py/proxy/core/acceptor/threadless.py", line 334, in _run_once
    teardown = task.result()
  File "/Users/abhinavsingh/Dev/proxy.py/proxy/http/handler.py", line 192, in handle_events
    teardown = await plugin.read_from_descriptors(readables)
  File "/Users/abhinavsingh/Dev/proxy.py/proxy/http/proxy/server.py", line 299, in read_from_descriptors
    raw = plugin.handle_upstream_chunk(raw)
  File "/Users/abhinavsingh/Dev/proxy.py/proxy/plugin/modify_websocket_response.py", line 32, in handle_upstream_chunk
    self.client.queue(memoryview(self.response.build()))
  File "/Users/abhinavsingh/Dev/proxy.py/proxy/http/websocket/frame.py", line 161, in build
    struct.pack(
struct.error: pack expected 3 items for packing (got 2)

To Reproduce
Steps to reproduce the behavior:

  1. Start proxy.py
  2. ./helper/chrome_with_proxy.sh
  3. See exception in console

Expected behavior
There seems to be a typo error here:

elif self.payload_length < 1 << 64:
            raw.write(
                struct.pack(
                    '!BHQ',
                    (1 << 7 if self.masked else 0) | 127,
                    self.payload_length,
                ),
            )

We simply want !BQ and not !BHQ. But need to double check with spec and write tests for it. Opening this issue to track the same.

Metadata

Metadata

Assignees

No one assigned

    Labels

    BugBug report in proxy serverGood First IssueIssues for new contributors to pick-up

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions