From 4415f451385cf8538731814b116936deb3a2068e Mon Sep 17 00:00:00 2001 From: Tim Burke Date: Wed, 16 Dec 2020 22:09:14 -0800 Subject: [PATCH] s3api: Catch binascii.Error ...instead of raising AttributeError. Change-Id: I6515c36cb7f5b98f715bc8c33f1f822b1cfad668 Closes-Bug: #1908412 --- swift/common/middleware/s3api/s3request.py | 2 +- test/unit/common/middleware/s3api/test_s3api.py | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/swift/common/middleware/s3api/s3request.py b/swift/common/middleware/s3api/s3request.py index f3ae063076..a722d8523d 100644 --- a/swift/common/middleware/s3api/s3request.py +++ b/swift/common/middleware/s3api/s3request.py @@ -761,7 +761,7 @@ class S3Request(swob.Request): try: self.headers['ETag'] = binascii.b2a_hex( binascii.a2b_base64(value)) - except binascii.error: + except binascii.Error: # incorrect padding, most likely raise InvalidDigest(content_md5=value) diff --git a/test/unit/common/middleware/s3api/test_s3api.py b/test/unit/common/middleware/s3api/test_s3api.py index e89c791175..f2a8b476a2 100644 --- a/test/unit/common/middleware/s3api/test_s3api.py +++ b/test/unit/common/middleware/s3api/test_s3api.py @@ -576,6 +576,20 @@ class TestS3ApiMiddleware(S3ApiTestCase): status, headers, body = self.call_s3api(req) self.assertEqual(self._get_error_code(body), 'InvalidDigest') + def test_object_create_bad_md5_bad_padding(self): + too_short_digest = md5(b'hey', usedforsecurity=False).digest() + md5_str = base64.b64encode(too_short_digest).strip(b'=\n') + if not six.PY2: + md5_str = md5_str.decode('ascii') + req = Request.blank( + '/bucket/object', + environ={'REQUEST_METHOD': 'PUT', + 'HTTP_AUTHORIZATION': 'AWS X:Y:Z', + 'HTTP_CONTENT_MD5': md5_str}, + headers={'Date': self.get_date_header()}) + status, headers, body = self.call_s3api(req) + self.assertEqual(self._get_error_code(body), 'InvalidDigest') + def test_object_create_bad_md5_too_long(self): too_long_digest = md5( b'hey', usedforsecurity=False).digest() + b'suffix'