From: Mike Duglas Date: Mon, 6 Feb 2023 09:34:46 +0000 (+0100) Subject: ws: fix multiframe send handling X-Git-Tag: curl-7_88_0~61 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ad55b2363436f77bb3028ca091cef06b50657136;p=thirdparty%2Fcurl.git ws: fix multiframe send handling Fixes #10413 Closes #10420 --- diff --git a/lib/ws.c b/lib/ws.c index 18d7193862..44333309f1 100644 --- a/lib/ws.c +++ b/lib/ws.c @@ -561,17 +561,27 @@ static size_t ws_packethead(struct Curl_easy *data, } if(!(flags & CURLWS_CONT)) { - /* if not marked as continuing, assume this is the final fragment */ - firstbyte |= WSBIT_FIN | opcode; + if(!ws->ws.contfragment) + /* not marked as continuing, this is the final fragment */ + firstbyte |= WSBIT_FIN | opcode; + else + /* marked as continuing, this is the final fragment; set CONT + opcode and FIN bit */ + firstbyte |= WSBIT_FIN | WSBIT_OPCODE_CONT; + ws->ws.contfragment = FALSE; + infof(data, "WS: set FIN"); } else if(ws->ws.contfragment) { /* the previous fragment was not a final one and this isn't either, keep a CONT opcode and no FIN bit */ firstbyte |= WSBIT_OPCODE_CONT; + infof(data, "WS: keep CONT, no FIN"); } else { + firstbyte = opcode; ws->ws.contfragment = TRUE; + infof(data, "WS: set CONT, no FIN"); } out[0] = firstbyte; if(len > 65535) {