emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals/websocket 90b9f03da0 029/114: Correctly parse fragmente


From: ELPA Syncer
Subject: [elpa] externals/websocket 90b9f03da0 029/114: Correctly parse fragmented HTTP header
Date: Wed, 15 Feb 2023 20:58:57 -0500 (EST)

branch: externals/websocket
commit 90b9f03da026a5b1a402fc72316a6227ea1a39d5
Author: Ilya Semyonov <ilysym@yandex.ru>
Commit: Ilya Semyonov <ilysym@yandex.ru>

    Correctly parse fragmented HTTP header
---
 websocket.el | 30 ++++++++++++++++--------------
 1 file changed, 16 insertions(+), 14 deletions(-)

diff --git a/websocket.el b/websocket.el
index c42f2ccfe7..4a1cdda3a3 100644
--- a/websocket.el
+++ b/websocket.el
@@ -451,8 +451,8 @@ ERR should be a cons of error symbol and error data."
 The only acceptable one to websocket is responce code 101.
 A t value will be returned on success, and an error thrown
 if not."
-  (string-match "HTTP/1.1 \\([[:digit:]]+\\)" output)
-  (unless (equal "101" (match-string 1 output))
+  (unless (and (string-match "HTTP/1.1 \\([[:digit:]]+\\)" output)
+               (equal "101" (match-string 1 output)))
        (signal 'websocket-received-error-http-response
                (string-to-number (match-string 1 output))))
   t)
@@ -747,19 +747,21 @@ connection is invalid, the connection will be closed."
     (setf (websocket-inflight-input websocket) nil)
     ;; If we've received the complete header, check to see if we've
     ;; received the desired handshake.
-    (when (and (eq 'connecting (websocket-ready-state websocket))
-               (setq header-end-pos (string-match "\r\n\r\n" text))
+    (when (and (eq 'connecting (websocket-ready-state websocket)))
+      (if (and (setq header-end-pos (string-match "\r\n\r\n" text))
                (setq start-point (+ 4 header-end-pos)))
-      (condition-case err
-          (progn
-            (websocket-verify-response-code text)
-            (websocket-verify-headers websocket text)
-            (websocket-process-headers (websocket-url websocket) text))
-        (error
-         (websocket-close websocket)
-         (signal (car err) (cdr err))))
-      (setf (websocket-ready-state websocket) 'open)
-      (websocket-try-callback 'websocket-on-open 'on-open websocket))
+       (progn
+         (condition-case err
+             (progn
+               (websocket-verify-response-code text)
+               (websocket-verify-headers websocket text)
+               (websocket-process-headers (websocket-url websocket) text))
+           (error
+            (websocket-close websocket)
+            (signal (car err) (cdr err))))
+         (setf (websocket-ready-state websocket) 'open)
+         (websocket-try-callback 'websocket-on-open 'on-open websocket))
+       (setf (websocket-inflight-input websocket) text)))
     (when (eq 'open (websocket-ready-state websocket))
       (websocket-process-input-on-open-ws
        websocket (substring text (or start-point 0))))))



reply via email to

[Prev in Thread] Current Thread [Next in Thread]