The vulnerability, CVE-2026-77528, in Autobahn Python stems from an insufficient size check for WebSocket messages that use the permessage-deflate extension. The core issue is that the maxMessagePayloadSize limit was enforced against the compressed frame length, not the uncompressed (inflated) message size. This allowed an attacker to send a small, highly compressed message that would inflate to a much larger size, bypassing the intended resource limits.
My analysis focused on the src/autobahn/websocket/protocol.py file, as indicated by the vulnerability description and the provided patch. The onFrameData method is where the incoming frame data is processed, including the decompression step. In the vulnerable version, after the zlib inflation occurred, the message_data_total_length counter was not correctly updated to reflect the inflated size. Consequently, the check against maxMessagePayloadSize that happened earlier in the processing pipeline (based on the compressed size) was rendered ineffective for inflated messages.
The patch directly addresses this by inserting a new check within onFrameData. This check specifically calculates the 'inflation delta' (uncompressedLen - compressedLen) and adds it to self.message_data_total_length if the message is compressed. It then re-evaluates self.message_data_total_length against self.maxMessagePayloadSize. If the limit is exceeded, the connection is dropped, preventing the oversized message from reaching the application.
Therefore, WebSocketProtocol.onFrameData is identified as a vulnerable function because it was the point in the code where the critical post-inflation size validation was missing. The WebSocketProtocol._onMessage function is also identified as vulnerable because it would ultimately receive and process these oversized, unvalidated messages, directly exposing the application to the resource exhaustion vulnerability.