Merge pull request 'Limit server header response length' (#9) from jprjr/AV-98:header-limit into master

This commit is contained in:
solderpunk 2020-05-16 12:54:00 -04:00
commit cbd1ff48e9
1 changed files with 9 additions and 4 deletions

13
av98.py
View File

@ -334,9 +334,14 @@ you'll be able to transparently follow links to Gopherspace!""")
address, f = None, open(gi.path, "rb") address, f = None, open(gi.path, "rb")
else: else:
address, f = self._send_request(gi) address, f = self._send_request(gi)
# Read response header
header = f.readline() # Spec dictates <META> should not exceed 1024 bytes
header = header.decode("UTF-8").strip() # but does not dictate a total maximum header length.
header = f.readline(2048)
header = header.decode("UTF-8")
if header[-1] != '\n':
raise RuntimeError("Received invalid header from server!")
header = header.strip()
self._debug("Response header: %s." % header) self._debug("Response header: %s." % header)
# Catch network errors which may happen on initial connection # Catch network errors which may happen on initial connection
@ -361,7 +366,7 @@ Slow internet connection? Use 'set timeout' to be more patient.""")
# Validate header # Validate header
status, meta = header.split(maxsplit=1) status, meta = header.split(maxsplit=1)
if len(header) > 1024 or len(status) != 2 or not status.isnumeric(): if len(meta) > 1024 or len(status) != 2 or not status.isnumeric():
print("ERROR: Received invalid header from server!") print("ERROR: Received invalid header from server!")
f.close() f.close()
return return