Fix WebSocket extended length

This commit is contained in:
2025-09-06 11:30:48 -04:00
parent 1414d915a4
commit cc57b02d8c
2 changed files with 6 additions and 5 deletions
+5 -4
View File
@@ -354,12 +354,14 @@ static err_t ws_read(struct altcp_pcb *pcb, struct ws_state *wss, struct pbuf *p
uint8_t masked = data[1] & 0x80;
uint16_t msg_len = data[1] & 0x7F;
uint8_t *msg;
uint8_t *mask;
switch (msg_len) {
case 126: // next two bytes are length
memcpy(&msg_len, &data[2], 2);
msg_len = ( (uint16_t)data[2] << 8) | data[3];
if (len >= 8) {
msg = &data[8];
mask = &data[4];
}
break;
case 127: // next four bytes are length
@@ -369,6 +371,7 @@ static err_t ws_read(struct altcp_pcb *pcb, struct ws_state *wss, struct pbuf *p
default:
if (len >= 6) {
msg = &data[6];
mask = &data[2];
}
break;
}
@@ -382,8 +385,6 @@ static err_t ws_read(struct altcp_pcb *pcb, struct ws_state *wss, struct pbuf *p
if (msg && ws_receive_cb != NULL) {
// unmask the data if mask bit is received
if (masked) {
uint8_t *mask = &data[2];
for (int i=0; i<msg_len; i++) {
msg[i] ^= mask[i % 4];
}