gemini.git

going-flying.com gemini git repository

summary

tree

log

refs

84f67cabb158e94c364807362a7881ddc39ada43 - Matthew Ernisse - 1612631367

byte vs str semantics

view tree

view raw

diff --git a/cgi-bin/converter b/cgi-bin/converter
index 0ec205a..f12bb79 100755
--- a/cgi-bin/converter
+++ b/cgi-bin/converter
@@ -118,8 +118,13 @@ class GeminiCGI(object):
 		self.script_path = os.environ.get('SCRIPT_PATH')
 		self.query_string = os.environ.get('QUERY_STRING')
 
+		self.query_dequoted = ''
+		self.query_parsed = {}
+
 		if self.query_string:
+			self.query_dequoted = unquote(self.query_string)
 			self.query_parsed = parse_qs(self.query_string)
+			
 
 
 def encode_response(input, result):
@@ -251,19 +256,23 @@ if __name__ == '__main__':
 
 		# base64 encode/decode
 		elif cgi.path_info == 'base64/encode':
-			s = cgi.query_string
+			s = cgi.query_dequoted
 			try:
-				res = base64.b64encode(s)
-			except Exception:
+				res = base64.b64encode(s.encode('utf-8'))
+				res = res.decode('utf-8')
+			except Exception as e:
+				sys.stderr.write(f'{e!s}\n')
+				sys.stderr.flush()
 				cgi.Response.Fail()
 				sys.exit()
 
 			encode_response(s, res)
 
 		elif cgi.path_info == 'base64/decode':
-			s = cgi.query_string
+			s = cgi.query_dequoted
 			try:
 				res = base64.b64decode(s, validate=True)
+				res = res.decode('utf-8')
 			except Exception:
 				cgi.Response.Fail()
 				sys.exit()
@@ -272,7 +281,7 @@ if __name__ == '__main__':
 
 		# urlencode/decode
 		elif cgi.path_info == 'url/encode':
-			s = cgi.query_string
+			s = cgi.query_dequoted
 			try:
 				res = quote(s, errors='strict')
 			except Exception: