mirror of
https://github.com/curl/curl.git
synced 2026-07-24 02:47:17 +03:00
websocket: fix message send corruption
- Fix a bug in EAGAIN handling when sending frames that led to a
corrupted last byte of the frame sent.
- Restore sanity to curl_ws_send() behaviour:
- Partial writes are reported as OK with the actual number of
payload bytes sent.
- CURLE_AGAIN is only returned when none of the payload bytes
(or for 0-length frames, not all of the frame header bytes)
could be sent.
- curl_ws_send() now behaves like a common send() call.
- Change 'ws-data' test client to allow concurrent send/recv
operations and vary frame sizes and repeat count.
- Add DEBUG env var CURL_WS_CHUNK_EAGAIN to simulate blocking
after a chunk of an encoded websocket frame has been sent.
- Add tests.
Prior to this change data corruption may occur when sending websocket
messages due to two bugs:
1) 3e64569a (precedes 8.10.0) caused a data corruption bug in the last
byte of frame of large messages.
2) curl_ws_send had non-traditional send behavior and could return
CURLE_AGAIN with bytes sent and expect the caller to adjust buffer
and buflen in a subsequent call. That behavior was not documented.
Reported-by: na-trium-144@users.noreply.github.com
Fixes https://github.com/curl/curl/issues/15865
Fixes https://github.com/curl/curl/issues/15865#issuecomment-2569870144
Closes https://github.com/curl/curl/pull/15901
This commit is contained in:
parent
86f5653721
commit
02edae54e8
7 changed files with 298 additions and 224 deletions
|
|
@ -130,6 +130,11 @@ greater. There is a number of debug levels, refer to *openldap.c* comments.
|
|||
Used to influence the buffer chunk size used for WebSocket encoding and
|
||||
decoding.
|
||||
|
||||
## CURL_WS_CHUNK_EAGAIN
|
||||
|
||||
Used to simulate blocking sends after this chunk size for WebSocket
|
||||
connections.
|
||||
|
||||
## CURL_FORBID_REUSE
|
||||
|
||||
Used to set the CURLOPT_FORBID_REUSE flag on each transfer initiated
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue