Failing connection on invalid UTF8 in close reason.
This commit is contained in:
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…
Reference in New Issue