Fix oversized ws frame handling and increase receive buffers

This commit is contained in:
Your Name
2026-03-05 14:42:14 -04:00
parent e77973aea0
commit 5afe802e8f
2 changed files with 17 additions and 7 deletions
+2 -2
View File
@@ -1292,7 +1292,7 @@ cJSON** nostr_relay_pool_query_sync(
for (int i = 0; i < connected_count; i++) {
relay_connection_t* relay = connected_relays[i];
char buffer[8192];
char buffer[65536];
int len = nostr_ws_receive(relay->ws_client, buffer, sizeof(buffer) - 1, 100);
if (len > 0) {
buffer[len] = '\0';
@@ -1902,7 +1902,7 @@ int nostr_relay_pool_poll(nostr_relay_pool_t* pool, int timeout_ms) {
check_connection_health(relay);
// Process incoming messages
char buffer[8192];
char buffer[65536];
int timeout_per_relay = timeout_ms / pool->relay_count;
int len = nostr_ws_receive(relay->ws_client, buffer, sizeof(buffer) - 1, timeout_per_relay);
+15 -5
View File
@@ -915,11 +915,6 @@ static int ws_receive_frame(nostr_ws_client_t* client, ws_opcode_t* opcode, char
header_len = 10;
}
// Check payload length
if (len > *payload_len) {
return -1;
}
// Read mask (if present)
uint32_t mask = 0;
if (masked) {
@@ -932,6 +927,21 @@ static int ws_receive_frame(nostr_ws_client_t* client, ws_opcode_t* opcode, char
header[header_len + 3];
header_len += 4;
}
// Check payload length; if too large for caller buffer, drain frame to keep stream aligned
if (len > *payload_len) {
char discard[1024];
uint64_t remaining = len;
while (remaining > 0) {
size_t chunk = remaining > sizeof(discard) ? sizeof(discard) : (size_t)remaining;
int got = client->transport->recv(&client->transport_ctx, discard, chunk, timeout_ms);
if (got <= 0) {
return -1;
}
remaining -= (uint64_t)got;
}
return -1;
}
// Read payload
if (len > 0) {