diff options
author | Jenkins <jenkins@review.openstack.org> | 2013-07-23 00:09:47 +0000 |
---|---|---|
committer | Gerrit Code Review <review@openstack.org> | 2013-07-23 00:09:47 +0000 |
commit | 8ffaa0a4ce5676a90980ab879661659767f24d8e (patch) | |
tree | e36bd985691798ab97f073d8055acd4bb99492be /swiftclient/client.py | |
parent | 2f84a4e76b03863fe2e62515f150580b09dc20d1 (diff) | |
parent | 7d88d14def2541227fb4d3f96016a51b0bafa36b (diff) | |
download | python-swiftclient-8ffaa0a4ce5676a90980ab879661659767f24d8e.tar.gz |
Merge "Refuse carriage return in header value"
Diffstat (limited to 'swiftclient/client.py')
-rw-r--r-- | swiftclient/client.py | 20 |
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() |