From: Ben Darnell Date: Sat, 16 Apr 2011 20:41:40 +0000 (-0700) Subject: str.encode('base64') != base64.b64encode() X-Git-Tag: v2.0.0~102 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8b4a66cb5315c6c2be85ae63ff66160f8e829260;p=thirdparty%2Ftornado.git str.encode('base64') != base64.b64encode() Add check for newlines in request headers. Closes #246 --- diff --git a/tornado/simple_httpclient.py b/tornado/simple_httpclient.py index c34f75589..906461bb5 100644 --- a/tornado/simple_httpclient.py +++ b/tornado/simple_httpclient.py @@ -8,6 +8,7 @@ from tornado.ioloop import IOLoop from tornado.iostream import IOStream, SSLIOStream from tornado import stack_context +import base64 import collections import contextlib import copy @@ -197,7 +198,7 @@ class _HTTPConnection(object): if username is not None: auth = "%s:%s" % (username, password) self.request.headers["Authorization"] = ("Basic %s" % - auth.encode("base64")) + base64.b64encode(auth)) if self.request.user_agent: self.request.headers["User-Agent"] = self.request.user_agent has_body = self.request.method in ("POST", "PUT") @@ -217,7 +218,10 @@ class _HTTPConnection(object): request_lines = ["%s %s HTTP/1.1" % (self.request.method, req_path)] for k, v in self.request.headers.get_all(): - request_lines.append("%s: %s" % (k, v)) + line = "%s: %s" % (k, v) + if '\n' in line: + raise ValueError('Newline in header: ' + repr(line)) + request_lines.append(line) self.stream.write("\r\n".join(request_lines) + "\r\n\r\n") if has_body: self.stream.write(self.request.body)