Tcl Library Source Code

View Ticket
Login
Ticket UUID: 5d23e45b0ec5a81e67aa1f492339a31e4c8b4ada
Title: Websocket keys should not be wrapped
Type: Bug Version:
Submitter: anonymous Created on: 2014-09-22 15:38:26
Subsystem: websocket Assigned To: emmanuel
Priority: 7 High Severity: Important
Status: Closed Last Modified: 2022-10-10 16:31:46
Resolution: Fixed Closed By: kjnash
    Closed on: 2022-10-10 16:31:46
Description:
::base64::encode defaults to line folding. Make sure WebSocket keys are not folded.

-------- >8 --------

commit 4ed0887b50c262df6b1477d92b950d0be16943d6
Author: Adrián Medraño Calvo <[email protected]>
Date:   Mon Sep 22 17:35:00 2014 +0200

    [ws]: Make sure not to wrap the WebSocket key

diff --git a/src/websocket.tcl b/src/websocket.tcl
index 6d60537..a9e0624 100644
--- a/src/websocket.tcl
+++ b/src/websocket.tcl
@@ -1434,7 +1434,7 @@ proc ::websocket::open { url handler args } {
     for { set i 0 } { $i < 4 } { incr i } {
         append OPEN(nonce) [binary format Iu [expr {int(rand()*4294967296)}]]
     }
-    set OPEN(nonce) [::base64::encode $OPEN(nonce)]
+    set OPEN(nonce) [::base64::encode -maxlen 0 $OPEN(nonce)]
     set HDR(Sec-WebSocket-Key) $OPEN(nonce)
     set HDR(Sec-WebSocket-Protocol) [join $protos ", "]
     set HDR(Sec-WebSocket-Version) $WS(ws_version)
@@ -1652,7 +1652,7 @@ proc ::websocket::configure { sock args } {
 proc ::websocket::sec-websocket-accept { key } {
     variable WS
     set sec ${key}$WS(ws_magic)
-    return [::base64::encode [sha1::sha1 -bin $sec]]
+    return [::base64::encode -maxlen 0 [sha1::sha1 -bin $sec]]
 }
 
 # ::websocket::SplitCommaSeparated -- Extract elements from comma-separated headers
User Comments: kjnash added on 2022-10-10 16:31:46:
Fixed in commit [a500ff9409].