Skip to content

Commit 04e7c4d

Browse files
Apply escaping rules when parsing cookie values
1 parent 653ee14 commit 04e7c4d

File tree

3 files changed

+11
-8
lines changed

3 files changed

+11
-8
lines changed

src/engineio/async_client.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import asyncio
2+
from http.cookies import SimpleCookie
23
import signal
34
import ssl
45
import threading
@@ -319,14 +320,13 @@ async def _connect_websocket(self, url, headers, engineio_path):
319320

320321
# extract any new cookies passed in a header so that they can also be
321322
# sent the the WebSocket route
322-
cookies = {}
323323
for header, value in headers.items():
324324
if header.lower() == 'cookie':
325-
cookies = dict(
326-
[cookie.split('=', 1) for cookie in value.split('; ')])
325+
ck = SimpleCookie(headers[header])
326+
self.http.cookie_jar.update_cookies(
327+
{k: m.value for k, m in ck.items()})
327328
del headers[header]
328329
break
329-
self.http.cookie_jar.update_cookies(cookies)
330330

331331
extra_options = {'timeout': self.request_timeout}
332332
if not self.ssl_verify:

src/engineio/client.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
from base64 import b64encode
2-
from engineio.json import JSONDecodeError
2+
from http.cookies import SimpleCookie
33
import logging
44
import queue
55
import ssl
66
import threading
77
import time
88
import urllib
9+
from engineio.json import JSONDecodeError
910

1011
try:
1112
import requests
@@ -268,8 +269,10 @@ def _connect_websocket(self, url, headers, engineio_path):
268269
extra_options = {}
269270
if self.http:
270271
# cookies
271-
cookies = '; '.join([f"{cookie.name}={cookie.value}"
272-
for cookie in self.http.cookies])
272+
ck = SimpleCookie()
273+
for cookie in self.http.cookies:
274+
ck[cookie.name] = cookie.value
275+
cookies = ck.output(header='', sep=';').strip()
273276
for header, value in headers.items():
274277
if header.lower() == 'cookie':
275278
if cookies:

tests/async/test_client.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -714,7 +714,7 @@ async def test_websocket_connection_with_cookie_header(self, _time):
714714
timeout=5,
715715
)
716716
c.http.cookie_jar.update_cookies.assert_called_once_with(
717-
{'key': 'value', 'key2': 'value2', 'key3': '"value3="'}
717+
{'key': 'value', 'key2': 'value2', 'key3': 'value3='}
718718
)
719719

720720
@mock.patch('engineio.client.time.time', return_value=123.456)

0 commit comments

Comments
 (0)