Skip to content

Commit 4da4389

Browse files
author
jczic
committed
Fix large size bug in WebSockets module
1 parent 763e761 commit 4da4389

File tree

1 file changed

+15
-15
lines changed

1 file changed

+15
-15
lines changed

MicroWebSrv2/mods/WebSockets.py

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -182,12 +182,12 @@ def onHdrStartingRecv(xasCli, data, arg) :
182182
self._close(1002, 'Protocol error (bad frame in the context)')
183183
return
184184

185-
def endOfHeader(maskingKey) :
185+
def endOfHeader(dataLen, maskingKey) :
186186

187187
def onPayloadDataRecv(xasCli, data, arg) :
188188

189189
if maskingKey :
190-
for i in range(length) :
190+
for i in range(dataLen) :
191191
data[i] ^= maskingKey[i%4]
192192

193193
if self._currentMsgData :
@@ -246,7 +246,7 @@ def onPayloadDataRecv(xasCli, data, arg) :
246246
if not isCtrlFrame :
247247
# Message frame or continuation frame,
248248
if self._maxRecvMsgLen :
249-
l = length
249+
l = dataLen
250250
if self._currentMsgData :
251251
l += len(self._currentMsgData)
252252
if l > self._maxRecvMsgLen :
@@ -258,35 +258,35 @@ def onPayloadDataRecv(xasCli, data, arg) :
258258
elif opcode == WebSocket._OP_FRAME_BIN :
259259
self._currentMsgType = WebSocket._MSG_TYPE_BIN
260260
try :
261-
self._recvData(onPayloadDataRecv, length)
261+
self._recvData(onPayloadDataRecv, dataLen)
262262
except :
263263
# Frame is too large for memory allocation,
264264
self._close(1009, 'Frame is too large to be processed')
265265
elif opcode == WebSocket._OP_FRAME_PING :
266266
# Ping control frame,
267-
if length > 0 :
267+
if dataLen > 0 :
268268
def onPingDataRecv(xasCli, data, arg) :
269269
data = bytearray(data)
270270
self._sendFrame(WebSocket._OP_FRAME_PONG, data)
271271
self._waitFrame()
272-
self._recvData(onPingDataRecv, length)
272+
self._recvData(onPingDataRecv, dataLen)
273273
else :
274274
self._sendFrame(WebSocket._OP_FRAME_PONG)
275275
self._waitFrame()
276276
elif opcode == WebSocket._OP_FRAME_PONG :
277277
# Pong control frame,
278-
if length > 0 :
278+
if dataLen > 0 :
279279
def onPongDataRecv(xasCli, data, arg) :
280280
self._waitFrame()
281-
self._recvData(onPongDataRecv, length)
281+
self._recvData(onPongDataRecv, dataLen)
282282
else :
283283
self._waitFrame()
284284
elif opcode == WebSocket._OP_FRAME_CLOSE :
285285
# Close control frame,')
286-
if length > 0 :
286+
if dataLen > 0 :
287287
def onCloseDataRecv(xasCli, data, arg) :
288288
self._close()
289-
self._recvData(onCloseDataRecv, length)
289+
self._recvData(onCloseDataRecv, dataLen)
290290
else :
291291
self._close()
292292
else :
@@ -295,16 +295,16 @@ def onCloseDataRecv(xasCli, data, arg) :
295295

296296
# - End of endOfHeader -
297297

298-
def getMaskingKey() :
298+
def getMaskingKey(dataLen) :
299299

300300
if masked :
301301
# Frame is masked by the next 4 bytes key,
302302
def onMaskingKeyRecv(xasCli, data, arg) :
303-
endOfHeader(maskingKey=bytes(data))
303+
endOfHeader(dataLen=dataLen, maskingKey=bytes(data))
304304
self._recvData(onMaskingKeyRecv, 4)
305305
else :
306306
# Frame is not masked,
307-
endOfHeader(maskingKey=None)
307+
endOfHeader(dataLen=dataLen, maskingKey=None)
308308

309309
# - End of getMaskingKey -
310310

@@ -313,7 +313,7 @@ def onMaskingKeyRecv(xasCli, data, arg) :
313313
self._close(1002, 'Protocol error (payload data required)')
314314
elif length <= 0x7D :
315315
# Frame length <= 0x7D,
316-
getMaskingKey()
316+
getMaskingKey(dataLen=length)
317317
elif isCtrlFrame :
318318
# Bad frame for length of control frame > 0x7D,
319319
self._close(1002, 'Protocol error (bad control frame length)')
@@ -325,7 +325,7 @@ def onLenExt1Recv(xasCli, data, arg) :
325325
# Bad frame for 16 bits length < 0x7E,
326326
self._close(1002, 'Protocol error (bad length encoding)')
327327
else :
328-
getMaskingKey()
328+
getMaskingKey(dataLen=length)
329329
self._recvData(onLenExt1Recv, 2)
330330
else :
331331
# Frame length is encoded on next 64 bits.

0 commit comments

Comments
 (0)