kopia lustrzana https://github.com/cirospaciari/socketify.py
Fix SegFault in req.get_query() call
This would segfault if called after an middleware that called an asynchronous functionpull/206/head
rodzic
464804edef
commit
b224a1634a
|
@ -2489,25 +2489,18 @@ class AppRequest:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def get_query(self, key):
|
def get_query(self, key):
|
||||||
if self._query:
|
if self._query is None:
|
||||||
return self._query.get(key, None)
|
# Cache the query parameters
|
||||||
buffer = ffi.new("char**")
|
buffer = ffi.new("char**")
|
||||||
|
query_string_length = lib.uws_req_get_query_string(self.req, buffer)
|
||||||
if isinstance(key, str):
|
if query_string_length > 0:
|
||||||
key_data = key.encode("utf-8")
|
|
||||||
elif isinstance(key, bytes):
|
|
||||||
key_data = key
|
|
||||||
else:
|
|
||||||
key_data = self.app._json_serializer.dumps(key).encode("utf-8")
|
|
||||||
|
|
||||||
length = lib.uws_req_get_query(self.req, key_data, len(key_data), buffer)
|
|
||||||
buffer_address = ffi.addressof(buffer, 0)[0]
|
buffer_address = ffi.addressof(buffer, 0)[0]
|
||||||
if buffer_address == ffi.NULL:
|
query_string = ffi.unpack(buffer_address, query_string_length).decode("utf-8")
|
||||||
return None
|
from urllib.parse import parse_qs
|
||||||
try:
|
self._query = parse_qs(query_string)
|
||||||
return ffi.unpack(buffer_address, length).decode("utf-8")
|
else:
|
||||||
except Exception: # invalid utf-8
|
self._query = {}
|
||||||
return None
|
return self._query.get(key, None)
|
||||||
|
|
||||||
def get_parameters(self):
|
def get_parameters(self):
|
||||||
if self._params:
|
if self._params:
|
||||||
|
|
Ładowanie…
Reference in New Issue