Failing connection on invalid UTF8 in close reason.

master
Thomas Hintz 10 years ago
parent 3efccc88aa
commit 221d2d0e6e

@ -451,8 +451,13 @@
(define (process-fragments fragments optype #!optional (ws (current-websocket))) (define (process-fragments fragments optype #!optional (ws (current-websocket)))
(let ((message-body (string-concatenate/shared (let ((message-body (string-concatenate/shared
(reverse (map unmask fragments))))) (reverse (map unmask fragments)))))
(when (and (eq? optype 'text) (when (and (or (eq? optype 'text) (eq? optype 'connection-close))
(not (valid-utf8? message-body))) (not (valid-utf8?
(if (eq? optype 'text)
message-body
(if (> (string-length message-body) 2)
(substring message-body 2)
"")))))
(set-websocket-state! ws 'error) (set-websocket-state! ws 'error)
(signal (make-websocket-exception (signal (make-websocket-exception
(make-property-condition (make-property-condition
@ -497,7 +502,10 @@
#t) #t)
(let loop () (let loop ()
(receive (data type) (receive-message ws) (receive (data type) (receive-message ws)
(unless (eq? type 'connection-close) (loop))))) (if (eq? type 'connection-close)
(unless (valid-utf8? data)
(set! close-reason 'invalid-data))
(loop)))))
(begin (begin
(send-frame ws 'connection-close (send-frame ws 'connection-close
(u8vector 3 (close-reason->close-code close-reason)) (u8vector 3 (close-reason->close-code close-reason))

Loading…
Cancel
Save