summaryrefslogtreecommitdiff
path: root/swiftclient/client.py
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2013-07-23 00:09:47 +0000
committerGerrit Code Review <review@openstack.org>2013-07-23 00:09:47 +0000
commit8ffaa0a4ce5676a90980ab879661659767f24d8e (patch)
treee36bd985691798ab97f073d8055acd4bb99492be /swiftclient/client.py
parent2f84a4e76b03863fe2e62515f150580b09dc20d1 (diff)
parent7d88d14def2541227fb4d3f96016a51b0bafa36b (diff)
downloadpython-swiftclient-8ffaa0a4ce5676a90980ab879661659767f24d8e.tar.gz
Merge "Refuse carriage return in header value"
Diffstat (limited to 'swiftclient/client.py')
-rw-r--r--swiftclient/client.py20
1 files changed, 18 insertions, 2 deletions
diff --git a/swiftclient/client.py b/swiftclient/client.py
index 0bdc4bc..c9012be 100644
--- a/swiftclient/client.py
+++ b/swiftclient/client.py
@@ -76,6 +76,17 @@ def quote(value, safe='/'):
return value
+def validate_headers(headers):
+ if headers:
+ for key, value in headers.iteritems():
+ if '\n' in value:
+ raise InvalidHeadersException("%r header contained a "
+ "newline" % key)
+ if '\r' in value:
+ raise InvalidHeadersException("%r header contained a "
+ "carriage return" % key)
+
+
def encode_utf8(value):
if isinstance(value, unicode):
value = value.encode('utf8')
@@ -91,6 +102,10 @@ except ImportError:
from json import loads as json_loads
+class InvalidHeadersException(Exception):
+ pass
+
+
class ClientException(Exception):
def __init__(self, msg, http_scheme='', http_host='', http_port='',
@@ -187,6 +202,7 @@ def http_connection(url, proxy=None, ssl_compression=True):
@wraps(func)
def request_escaped(method, url, body=None, headers=None):
+ validate_headers(headers)
url = encode_utf8(url)
if body:
body = encode_utf8(body)
@@ -635,7 +651,7 @@ def put_container(url, token, container, headers=None, http_conn=None,
headers = {}
headers['X-Auth-Token'] = token
if not 'content-length' in (k.lower() for k in headers):
- headers['Content-Length'] = 0
+ headers['Content-Length'] = '0'
conn.request(method, path, '', headers)
resp = conn.getresponse()
body = resp.read()
@@ -675,7 +691,7 @@ def post_container(url, token, container, headers, http_conn=None,
method = 'POST'
headers['X-Auth-Token'] = token
if not 'content-length' in (k.lower() for k in headers):
- headers['Content-Length'] = 0
+ headers['Content-Length'] = '0'
conn.request(method, path, '', headers)
resp = conn.getresponse()
body = resp.read()