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

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

[elpa] externals/websocket 923e74d686 038/114: Merge pull request #40 fr


From: ELPA Syncer
Subject: [elpa] externals/websocket 923e74d686 038/114: Merge pull request #40 from ilysym/fragmented-header
Date: Wed, 15 Feb 2023 20:58:58 -0500 (EST)

branch: externals/websocket
commit 923e74d68658acc33cb1247e75edb0391c20f7cd
Merge: 19f9b3b74f 6b43f7525f
Author: Andrew Hyatt <ahyatt@gmail.com>
Commit: Andrew Hyatt <ahyatt@gmail.com>

    Merge pull request #40 from ilysym/fragmented-header
    
    Correctly parse fragmented HTTP header
---
 websocket-test.el |  9 ++++++---
 websocket.el      | 33 ++++++++++++++++++---------------
 2 files changed, 24 insertions(+), 18 deletions(-)

diff --git a/websocket-test.el b/websocket-test.el
index 7068bd0672..db16ddbf8e 100644
--- a/websocket-test.el
+++ b/websocket-test.el
@@ -114,7 +114,9 @@
    (eq 400 (cdr (should-error (websocket-verify-response-code "HTTP/1.1 400")
                           :type 'websocket-received-error-http-response))))
   (should
-   (eq 200 (cdr (should-error (websocket-verify-response-code "HTTP/1.1 
200"))))))
+   (eq 200 (cdr (should-error (websocket-verify-response-code "HTTP/1.1 
200")))))
+  (should-error (websocket-verify-response-code "HTTP/1.")
+                :type 'websocket-invalid-header))
 
 (ert-deftest websocket-verify-headers ()
   (let ((accept "Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=")
@@ -420,8 +422,9 @@
             (websocket frame)
             (lexical-let ((frame frame))
               (lambda () (push frame processed-frames))))
-           (websocket-verify-response-code (output) t)
-           (websocket-verify-headers (websocket output) t))
+           (websocket-verify-headers (websocket output) t)
+           (websocket-close (websocket)))
+      (websocket-outer-filter fake-ws "HTTP/1.1 101 Switching Protocols\r\n")
       (websocket-outer-filter fake-ws "Sec-")
       (should (eq (websocket-ready-state fake-ws) 'connecting))
       (should-not open-callback-called)
diff --git a/websocket.el b/websocket.el
index 3b048da95c..49e8366b39 100644
--- a/websocket.el
+++ b/websocket.el
@@ -450,10 +450,11 @@ 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 (string-match "^HTTP/1.1 \\([[:digit:]]+\\)" output)
+    (signal 'websocket-invalid-header "Invalid HTTP status line"))
   (unless (equal "101" (match-string 1 output))
-       (signal 'websocket-received-error-http-response
-               (string-to-number (match-string 1 output))))
+    (signal 'websocket-received-error-http-response
+           (string-to-number (match-string 1 output))))
   t)
 
 (defun websocket-parse-repeated-field (output field)
@@ -746,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]