)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"2fb18b248eb71e232c7ae417d04dbbcc0254a7d9","unresolved":true,"context_lines":[{"line_number":4,"context_line":"Commit:     ashnair \u003cashnair@nvidia.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2025-02-13 15:58:03 -0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"sq: modify is_sha256 check and change tests"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: Id7e5739057b83bd697962d46128a25e786599d0b"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"71ac0f2f_51a40c3b","line":7,"range":{"start_line":7,"start_character":4,"end_line":7,"end_character":26},"updated":"2025-07-18 08:07:20.000000000","message":"the patch doesn\u0027t seem to do this","commit_id":"66ebf11b691958a85b1e0ea764ebe71d03705159"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"fd9c7d0b42a74183fa8d3bb64cf2c84da4bda771","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":3,"id":"beeb2e32_14c25877","updated":"2024-10-29 15:50:06.000000000","message":"We need additional unit-tests on 411 errors to see where exactly the bug is and the code is failing? My initial assessment is that we need to add a check for content-length header and bifurcate the check we have in place for `x-amz-decoded-content-length` since `0` value should raise a 400 with an `InvalidArgument` and not a SHA256 mismatch.","commit_id":"2ae4e4b51d07da27016a800ada94f82cf6b0da60"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"b0b7cf81120538c9b7266b3da3ade541b866fb4b","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":4,"id":"ee3bee5f_c796f4ad","updated":"2024-10-29 22:45:19.000000000","message":"Zuul should be happier with this latest patch, i would wait for it to finish","commit_id":"e93f4137d3815e9c055b88c4b2d33a9ad8ac8f42"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"b3523108c797d23e0889aafb836d49b093ab9b13","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":4,"id":"b422ecbc_927f203c","updated":"2024-10-30 16:10:03.000000000","message":"needs more tests","commit_id":"e93f4137d3815e9c055b88c4b2d33a9ad8ac8f42"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"f76b8ef59c6cca1be05bf2361b890d8fd8c05c6c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"465ef3c5_a2384f7c","updated":"2024-10-30 15:19:36.000000000","message":"recheck","commit_id":"e93f4137d3815e9c055b88c4b2d33a9ad8ac8f42"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"1fd323406cf0e9d53c42c2ad3306c63a1ed4c242","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"c4f0cbe6_50e2d263","updated":"2024-10-29 22:58:26.000000000","message":"tox has a clean report on this patch at its current state","commit_id":"e93f4137d3815e9c055b88c4b2d33a9ad8ac8f42"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"d43eaa5aff5768b11a41683c0d4cec0a5ec72926","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"14a426dc_9730ac1c","in_reply_to":"ee3bee5f_c796f4ad","updated":"2024-10-29 23:53:33.000000000","message":"Done","commit_id":"e93f4137d3815e9c055b88c4b2d33a9ad8ac8f42"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"2fb18b248eb71e232c7ae417d04dbbcc0254a7d9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"a79b9513_358c9cc3","updated":"2025-07-18 08:07:20.000000000","message":"It looks like there are some tests in this patch that didn\u0027t make it to master via squashing, but I\u0027m not sure they tall with the commit message, and obvs the merge conflict needs to be sorted out.","commit_id":"66ebf11b691958a85b1e0ea764ebe71d03705159"}],"swift/common/middleware/s3api/s3request.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"2fb18b248eb71e232c7ae417d04dbbcc0254a7d9","unresolved":true,"context_lines":[{"line_number":482,"context_line":""},{"line_number":483,"context_line":"        Returns:"},{"line_number":484,"context_line":"            bool: True if all chunk signatures are valid, False otherwise."},{"line_number":485,"context_line":"        \"\"\""},{"line_number":486,"context_line":"        if not self._all_chunk_signatures_valid:"},{"line_number":487,"context_line":"            return False"},{"line_number":488,"context_line":"        # NB: string_to_sign is calculated using the previous signature"}],"source_content_type":"text/x-python","patch_set":13,"id":"56ec4a12_88399351","line":485,"updated":"2025-07-18 08:07:20.000000000","message":"master has a similar doctsring","commit_id":"66ebf11b691958a85b1e0ea764ebe71d03705159"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"2fb18b248eb71e232c7ae417d04dbbcc0254a7d9","unresolved":true,"context_lines":[{"line_number":513,"context_line":"    Raises:"},{"line_number":514,"context_line":"        AccessDenied: If the credential string is invalid or does not follow"},{"line_number":515,"context_line":"        the required format."},{"line_number":516,"context_line":"    \"\"\""},{"line_number":517,"context_line":"    parts \u003d credential_string.split(\"/\")"},{"line_number":518,"context_line":"    # credential must be in following format:"},{"line_number":519,"context_line":"    # \u003caccess-key-id\u003e/\u003cdate\u003e/\u003cAWS-region\u003e/\u003cAWS-service\u003e/aws4_request"}],"source_content_type":"text/x-python","patch_set":13,"id":"e887a8e9_18654fb8","line":516,"updated":"2025-07-18 08:07:20.000000000","message":"master has a similar docstring","commit_id":"66ebf11b691958a85b1e0ea764ebe71d03705159"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"cfb64771f367732f07b4a8152742dd7325bb8fcb","unresolved":true,"context_lines":[{"line_number":1234,"context_line":"                                      decoded_content_length)"},{"line_number":1235,"context_line":""},{"line_number":1236,"context_line":"            if self.content_length is None:"},{"line_number":1237,"context_line":"                raise MissingContentLength"},{"line_number":1238,"context_line":""},{"line_number":1239,"context_line":"            if not self._is_streaming_supported:"},{"line_number":1240,"context_line":"                if decoded_content_length \u003c (self.content_length or 0):"}],"source_content_type":"text/x-python","patch_set":13,"id":"cf755523_eb13130c","line":1237,"updated":"2025-02-14 01:53:04.000000000","message":"So this actually shouldn\u0027t be raised -- apparently you _can_ have both `Transfer-Encoding: chunked` _and_ `Content-Encoding: aws-chunked`, it\u0027s just a pain to reason about when you look at it on the wire.","commit_id":"66ebf11b691958a85b1e0ea764ebe71d03705159"}],"test/s3api/__init__.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"2fb18b248eb71e232c7ae417d04dbbcc0254a7d9","unresolved":true,"context_lines":[{"line_number":261,"context_line":"class BaseS3TestCaseWithBucket(BaseS3Mixin, unittest.TestCase):"},{"line_number":262,"context_line":"    @classmethod"},{"line_number":263,"context_line":"    def setUpClass(cls):"},{"line_number":264,"context_line":"        cls.bucket_name \u003d cls.create_name(\u0027bucket\u0027)"},{"line_number":265,"context_line":"        client \u003d cls.get_s3_client(1)"},{"line_number":266,"context_line":"        client.create_bucket(Bucket\u003dcls.bucket_name)"},{"line_number":267,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"de77d6a7_3a717727","line":264,"updated":"2025-07-18 08:07:20.000000000","message":"this is on master","commit_id":"66ebf11b691958a85b1e0ea764ebe71d03705159"}],"test/s3api/test_input_errors.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"cfb64771f367732f07b4a8152742dd7325bb8fcb","unresolved":true,"context_lines":[{"line_number":1430,"context_line":"                \u0027x-amz-copy-source\u0027: \u0027%s/%s\u0027 % (self.bucket_name,"},{"line_number":1431,"context_line":"                                                \u0027test-obj\u0027),"},{"line_number":1432,"context_line":"                \u0027content-encoding\u0027: \u0027aws-chunked\u0027})"},{"line_number":1433,"context_line":"        self.assertIncompleteBody(resp)"},{"line_number":1434,"context_line":""},{"line_number":1435,"context_line":"    def test_no_md5_no_sha(self):"},{"line_number":1436,"context_line":"        resp \u003d self.conn.make_request("}],"source_content_type":"text/x-python","patch_set":13,"id":"04329bc0_8c55f918","line":1433,"updated":"2025-02-14 01:53:04.000000000","message":"This is an interesting test, that\u0027s a right pain to try to make pass -- I can get it to pop `MissingContentLength` pretty easily, but `IncompleteBody` is hard to get at unless we go break a bunch of *other* tests that are looking for `MissingContentLength`. Seems like a corner case better addressed in a follow-on.","commit_id":"66ebf11b691958a85b1e0ea764ebe71d03705159"}],"test/unit/common/middleware/s3api/test_s3api.py":[{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"b3523108c797d23e0889aafb836d49b093ab9b13","unresolved":true,"context_lines":[{"line_number":979,"context_line":"                                     \u0027Authorization\u0027: \u0027AWS test:tester:hmac\u0027,"},{"line_number":980,"context_line":"                                     \u0027Date\u0027: self.get_date_header()})"},{"line_number":981,"context_line":"        status, _, body \u003d self.call_s3api(req)"},{"line_number":982,"context_line":"        self.assertEqual(status, \u0027411 Length Required\u0027)"},{"line_number":983,"context_line":"        self.assertEqual(self._get_error_code(body),"},{"line_number":984,"context_line":"                         \u0027MissingContentLength\u0027)"},{"line_number":985,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"16b1ff75_ce6e08bd","line":982,"updated":"2024-10-30 16:10:03.000000000","message":"I can look into s3api docs and see what the correct error condition is in this situation to ensure that we are raising the right error but for now we all have our cross-compat tests passing which means it could potentially use more coverage","commit_id":"e93f4137d3815e9c055b88c4b2d33a9ad8ac8f42"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"226db3d7922c4392c7391832bd229dc7bf7373d6","unresolved":true,"context_lines":[{"line_number":979,"context_line":"                                     \u0027Authorization\u0027: \u0027AWS test:tester:hmac\u0027,"},{"line_number":980,"context_line":"                                     \u0027Date\u0027: self.get_date_header()})"},{"line_number":981,"context_line":"        status, _, body \u003d self.call_s3api(req)"},{"line_number":982,"context_line":"        self.assertEqual(status, \u0027411 Length Required\u0027)"},{"line_number":983,"context_line":"        self.assertEqual(self._get_error_code(body),"},{"line_number":984,"context_line":"                         \u0027MissingContentLength\u0027)"},{"line_number":985,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"203194e9_6d330de3","line":982,"in_reply_to":"16b1ff75_ce6e08bd","updated":"2024-10-30 17:31:26.000000000","message":"For this test, we should be emitting a `400` since we have two `Authorization` headers in the request so lets handle the 411 case after we verify our creds","commit_id":"e93f4137d3815e9c055b88c4b2d33a9ad8ac8f42"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"600b474f6ec9a33d96c7687dcc3ee7556a1a3d09","unresolved":true,"context_lines":[{"line_number":979,"context_line":"                                     \u0027Authorization\u0027: \u0027AWS test:tester:hmac\u0027,"},{"line_number":980,"context_line":"                                     \u0027Date\u0027: self.get_date_header()})"},{"line_number":981,"context_line":"        status, _, body \u003d self.call_s3api(req)"},{"line_number":982,"context_line":"        self.assertEqual(status, \u0027411 Length Required\u0027)"},{"line_number":983,"context_line":"        self.assertEqual(self._get_error_code(body),"},{"line_number":984,"context_line":"                         \u0027MissingContentLength\u0027)"},{"line_number":985,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"85cca951_efa6fc78","line":982,"in_reply_to":"203194e9_6d330de3","updated":"2024-10-30 20:17:22.000000000","message":"ahh i found the correct error which is a 400 with an errr message saying `AuthorizationHeaderMalformed` from https://docs.aws.amazon.com/AmazonS3/latest/API/ErrorResponses.html#ErrorCodeList","commit_id":"e93f4137d3815e9c055b88c4b2d33a9ad8ac8f42"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"b3523108c797d23e0889aafb836d49b093ab9b13","unresolved":true,"context_lines":[{"line_number":993,"context_line":"                                     \u0027Authorization\u0027: \u0027AWS test:tester:hmac\u0027,"},{"line_number":994,"context_line":"                                     \u0027Date\u0027: self.get_date_header()})"},{"line_number":995,"context_line":"        status, _, body \u003d self.call_s3api(req)"},{"line_number":996,"context_line":"        self.assertEqual(status, \u0027411 Length Required\u0027)"},{"line_number":997,"context_line":"        self.assertEqual(self._get_error_code(body),"},{"line_number":998,"context_line":"                         \u0027MissingContentLength\u0027)"},{"line_number":999,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"8373f201_3290090f","line":996,"updated":"2024-10-30 16:10:03.000000000","message":"same here","commit_id":"e93f4137d3815e9c055b88c4b2d33a9ad8ac8f42"}],"test/unit/common/middleware/s3api/test_s3request.py":[{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"b3523108c797d23e0889aafb836d49b093ab9b13","unresolved":true,"context_lines":[{"line_number":1041,"context_line":"            caught.exception.body)"},{"line_number":1042,"context_line":""},{"line_number":1043,"context_line":"    @patch.object(S3Request, \u0027_validate_dates\u0027, lambda *a: None)"},{"line_number":1044,"context_line":"    def test_v4_req_amz_content_sha256_missing(self):"},{"line_number":1045,"context_line":"        # Virtual hosted-style"},{"line_number":1046,"context_line":"        self.s3api.conf.storage_domains \u003d [\u0027s3.test.com\u0027]"},{"line_number":1047,"context_line":"        environ \u003d {"}],"source_content_type":"text/x-python","patch_set":4,"id":"7361831d_6513a621","line":1044,"updated":"2024-10-30 16:10:03.000000000","message":"just a nit fix","commit_id":"e93f4137d3815e9c055b88c4b2d33a9ad8ac8f42"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"2fb18b248eb71e232c7ae417d04dbbcc0254a7d9","unresolved":false,"context_lines":[{"line_number":1041,"context_line":"            caught.exception.body)"},{"line_number":1042,"context_line":""},{"line_number":1043,"context_line":"    @patch.object(S3Request, \u0027_validate_dates\u0027, lambda *a: None)"},{"line_number":1044,"context_line":"    def test_v4_req_amz_content_sha256_missing(self):"},{"line_number":1045,"context_line":"        # Virtual hosted-style"},{"line_number":1046,"context_line":"        self.s3api.conf.storage_domains \u003d [\u0027s3.test.com\u0027]"},{"line_number":1047,"context_line":"        environ \u003d {"}],"source_content_type":"text/x-python","patch_set":4,"id":"830a1878_fa692905","line":1044,"in_reply_to":"7361831d_6513a621","updated":"2025-07-18 08:07:20.000000000","message":"This is on master","commit_id":"e93f4137d3815e9c055b88c4b2d33a9ad8ac8f42"}]}
