Skip to content

Commit 021dc87

Browse files
fix(ws_transport): fixed server-key corruption
When first fragment is sent over HTTP during websocket connection, defer buffering of fragment until after the websocket server-key is validated. This order is required because the first fragment buffering overwrites the memory holding the server-key headers. Fixes 2267d4b Fixes espressif/esp-protocols#396 PR espressif#13724
1 parent 51b6d16 commit 021dc87

File tree

1 file changed

+16
-14
lines changed

1 file changed

+16
-14
lines changed

components/tcp_transport/transport_ws.c

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -307,20 +307,6 @@ static int ws_connect(esp_transport_handle_t t, const char *host, int port, int
307307
return -1;
308308
}
309309

310-
if (delim_ptr != NULL) {
311-
size_t delim_pos = delim_ptr - ws->buffer + sizeof(delimiter) - 1;
312-
size_t remaining_len = ws->buffer_len - delim_pos;
313-
if (remaining_len > 0) {
314-
memmove(ws->buffer, ws->buffer + delim_pos, remaining_len);
315-
ws->buffer_len = remaining_len;
316-
} else {
317-
#ifdef CONFIG_WS_DYNAMIC_BUFFER
318-
free(ws->buffer);
319-
ws->buffer = NULL;
320-
#endif
321-
ws->buffer_len = 0;
322-
}
323-
}
324310
// See esp_crypto_sha1() arg size
325311
unsigned char expected_server_sha1[20];
326312
// Size of base64 coded string see above
@@ -340,6 +326,22 @@ static int ws_connect(esp_transport_handle_t t, const char *host, int port, int
340326
ESP_LOGE(TAG, "Invalid websocket key");
341327
return -1;
342328
}
329+
330+
if (delim_ptr != NULL) {
331+
size_t delim_pos = delim_ptr - ws->buffer + sizeof(delimiter) - 1;
332+
size_t remaining_len = ws->buffer_len - delim_pos;
333+
if (remaining_len > 0) {
334+
memmove(ws->buffer, ws->buffer + delim_pos, remaining_len);
335+
ws->buffer_len = remaining_len;
336+
} else {
337+
#ifdef CONFIG_WS_DYNAMIC_BUFFER
338+
free(ws->buffer);
339+
ws->buffer = NULL;
340+
#endif
341+
ws->buffer_len = 0;
342+
}
343+
}
344+
343345
return 0;
344346
}
345347

0 commit comments

Comments
 (0)