Skip to content

Commit 39ebef7

Browse files
committed
Fix payload parsing for 64 byte payloads for WebSockets
1 parent 2c1cdc4 commit 39ebef7

1 file changed

Lines changed: 5 additions & 5 deletions

File tree

source/NetCoreServer/WebSocket.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -372,7 +372,7 @@ public void PrepareReceiveFrame(byte[] buffer, long offset, long size)
372372
byte opcode = (byte)(WsReceiveFrameBuffer[0] & 0x0F);
373373
bool fin = ((WsReceiveFrameBuffer[0] >> 7) & 0x01) != 0;
374374
bool mask = ((WsReceiveFrameBuffer[1] >> 7) & 0x01) != 0;
375-
long payload = WsReceiveFrameBuffer[1] & (~0x80);
375+
long payload = (long)WsReceiveFrameBuffer[1] & (~0x80);
376376

377377
// Prepare WebSocket opcode
378378
WsOpcode = (opcode != 0) ? opcode : WsOpcode;
@@ -395,7 +395,7 @@ public void PrepareReceiveFrame(byte[] buffer, long offset, long size)
395395
}
396396
}
397397

398-
payload = ((WsReceiveFrameBuffer[2] << 8) | (WsReceiveFrameBuffer[3] << 0));
398+
payload = (((long)WsReceiveFrameBuffer[2] << 8) | ((long)WsReceiveFrameBuffer[3] << 0));
399399
WsHeaderSize = 4 + (mask ? 4 : 0);
400400
WsPayloadSize = payload;
401401
}
@@ -411,7 +411,7 @@ public void PrepareReceiveFrame(byte[] buffer, long offset, long size)
411411
}
412412
}
413413

414-
payload = ((WsReceiveFrameBuffer[2] << 56) | (WsReceiveFrameBuffer[3] << 48) | (WsReceiveFrameBuffer[4] << 40) | (WsReceiveFrameBuffer[5] << 32) | (WsReceiveFrameBuffer[6] << 24) | (WsReceiveFrameBuffer[7] << 16) | (WsReceiveFrameBuffer[8] << 8) | (WsReceiveFrameBuffer[9] << 0));
414+
payload = (((long)WsReceiveFrameBuffer[2] << 56) | ((long)WsReceiveFrameBuffer[3] << 48) | ((long)WsReceiveFrameBuffer[4] << 40) | ((long)WsReceiveFrameBuffer[5] << 32) | ((long)WsReceiveFrameBuffer[6] << 24) | ((long)WsReceiveFrameBuffer[7] << 16) | ((long)WsReceiveFrameBuffer[8] << 8) | ((long)WsReceiveFrameBuffer[9] << 0));
415415
WsHeaderSize = 10 + (mask ? 4 : 0);
416416
WsPayloadSize = payload;
417417
}
@@ -481,7 +481,7 @@ public void PrepareReceiveFrame(byte[] buffer, long offset, long size)
481481
if (WsReceiveFinalBuffer.Size >= 2)
482482
{
483483
sindex += 2;
484-
status = ((WsReceiveFinalBuffer[0] << 8) | (WsReceiveFinalBuffer[1] << 0));
484+
status = (((int)WsReceiveFinalBuffer[0] << 8) | ((int)WsReceiveFinalBuffer[1] << 0));
485485
}
486486

487487
// Call the WebSocket close handler
@@ -517,7 +517,7 @@ public long RequiredReceiveFrameSize()
517517
return 2 - WsReceiveFrameBuffer.Size;
518518

519519
bool mask = ((WsReceiveFrameBuffer[1] >> 7) & 0x01) != 0;
520-
long payload = WsReceiveFrameBuffer[1] & (~0x80);
520+
long payload = (long)WsReceiveFrameBuffer[1] & (~0x80);
521521

522522
// Required WebSocket frame size
523523
if ((payload == 126) && (WsReceiveFrameBuffer.Size < 4))

0 commit comments

Comments
 (0)