Fix SegFault in req.get_query() call

This would segfault if called after an middleware that called an asynchronous function
pull/206/head
Arthô 2024-11-08 10:08:58 -03:00 zatwierdzone przez GitHub
rodzic 464804edef
commit b224a1634a
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: B5690EEEBB952194
1 zmienionych plików z 12 dodań i 19 usunięć

Wyświetl plik

@ -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: