check for None value in utils.safe_header

In case that a sensetive header (that should be obscured by its SHA1
hash) is None, the safe_header throws an exception which fails the
calling process and by that may harm the functionality.

Change-Id: I56944a382fd546eba0a6dd6d6b1cecf83b1dc106
Closes-Bug: #1491311
This commit is contained in:
David Edery
2015-09-02 14:50:47 +03:00
parent 1e2274aef0
commit 75ec9033c2
2 changed files with 16 additions and 1 deletions

View File

@@ -450,7 +450,7 @@ def memoized_property(fn):
def safe_header(name, value):
if name in SENSITIVE_HEADERS:
if value is not None and name in SENSITIVE_HEADERS:
v = value.encode('utf-8')
h = hashlib.sha1(v)
d = h.hexdigest()

View File

@@ -177,3 +177,18 @@ class TestUtils(testtools.TestCase):
i = utils.IterableWithLength(data, 10)
self.assertRaises(IOError, _iterate, i)
data.close.assert_called_with()
def test_safe_header(self):
self.assertEqual(('somekey', 'somevalue'),
utils.safe_header('somekey', 'somevalue'))
self.assertEqual(('somekey', None),
utils.safe_header('somekey', None))
for sensitive_header in utils.SENSITIVE_HEADERS:
(name, value) = utils.safe_header(sensitive_header, 'somestring')
self.assertEqual(sensitive_header, name)
self.assertTrue(value.startswith("{SHA1}"))
(name, value) = utils.safe_header(sensitive_header, None)
self.assertEqual(sensitive_header, name)
self.assertIsNone(value)