)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"f8a2bca21216036b11f9df3f88233995e5863a0a","unresolved":true,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"s3api: Add x-amz-server-side-encryption header on PUT requests"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"In a previous patch, we added the"},{"line_number":10,"context_line":"x-amz-server-side-encryption header on GET"},{"line_number":11,"context_line":"and HEAD request, since it went through"},{"line_number":12,"context_line":"the decryptor. This time, we add the option to expose"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"70f9ca34_f84605c8","line":9,"range":{"start_line":9,"start_character":0,"end_line":9,"end_character":19},"updated":"2026-06-22 21:25:53.000000000","message":"I\u0027ve taken to adding a tag to the commit message like\n```\nRelated-Change: Ib8efb38dad997a3b1c9840b175f5858624ec444b\n```\nor\n```\nRelated-Change: https://review.opendev.org/c/openstack/swift/+/990318\n```","commit_id":"12ce21f1e6669aaa18907bcf58610d6b608cd63a"},{"author":{"_account_id":39146,"name":"Nathaniel Martes","display_name":"Nate Martes","email":"nmartes@NVIDIA.com","username":"nmartes"},"change_message_id":"a4591b5a748085d355bbcd828fc8b6581ec74dfa","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"s3api: Add x-amz-server-side-encryption header on PUT requests"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"In a previous patch, we added the"},{"line_number":10,"context_line":"x-amz-server-side-encryption header on GET"},{"line_number":11,"context_line":"and HEAD request, since it went through"},{"line_number":12,"context_line":"the decryptor. This time, we add the option to expose"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"eb1b3492_f8e6073b","line":9,"range":{"start_line":9,"start_character":0,"end_line":9,"end_character":19},"in_reply_to":"70f9ca34_f84605c8","updated":"2026-06-23 15:37:05.000000000","message":"Acknowledged","commit_id":"12ce21f1e6669aaa18907bcf58610d6b608cd63a"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"4ae1340e145de13708d59109825115d271d8bb11","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"8d70f36c_cb95e485","updated":"2026-08-03 19:03:08.000000000","message":"my review agent found that swift is not handling zero-byte files correctly\n\n999651: sq? s3api: Capture zero-byte SSE response behavior | https://review.opendev.org/c/openstack/swift/+/999651\n\n... probably you should start with this test hanging off master and fix GET - then stack *this* patch on that existing-get-behavior bugfix and address the zero-byte-PUT problem\n\nAlso note there is probably a behavioral difference on COPY responses between swift/s3api that would be worth documenting exploring (although possibly only as a follow-up to after we add PUT support if we end up wanting to do that)","commit_id":"cf99a42a1cc7acaed602f3533150067de0e2b484"},{"author":{"_account_id":39146,"name":"Nathaniel Martes","display_name":"Nate Martes","email":"nmartes@NVIDIA.com","username":"nmartes"},"change_message_id":"a45192de147dbf301b0827f7632cec7848eacfc5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"3a698799_a0814cb2","in_reply_to":"8d70f36c_cb95e485","updated":"2026-08-03 22:42:24.000000000","message":"Noted, I\u0027ll start with a base patch to fix this up, thanks!","commit_id":"cf99a42a1cc7acaed602f3533150067de0e2b484"}],"swift/common/middleware/crypto/encrypter.py":[{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"3fc9ff94aac78c163a858098a48392275ca61cdd","unresolved":true,"context_lines":[{"line_number":262,"context_line":"        # inform middlewares upstream that data is encrypted"},{"line_number":263,"context_line":"        if is_success(self._get_status_int()):"},{"line_number":264,"context_line":"            crypto_meta \u003d getattr(enc_input_proxy, \u0027body_crypto_meta\u0027, None)"},{"line_number":265,"context_line":"            cipher \u003d crypto_meta and crypto_meta.get(\u0027cipher\u0027)"},{"line_number":266,"context_line":"            if cipher:"},{"line_number":267,"context_line":"                mod_resp_headers.append((\u0027X-Backend-Crypto-Cipher\u0027, cipher))"},{"line_number":268,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"27fe5280_72f07119","line":265,"updated":"2026-06-10 05:43:16.000000000","message":"Huh, I\u0027ve never used \u0027and\u0027 that way, I know \u0027and\u0027 short curcuits, but never thought to use \u0027and\u0027 simply as a guard for assugnment!\n\nSo if there is no cryto_meta, cipher or cryto_meta comaes back as something falsely then we\u0027re ok. I guess even if cryto_meta comes back as anything truthy then it\u0027ll go to the next check. So bascialy it have to come back either falsey or a dict. If falsy then we just check it fale-ness and throw it away.\n\nThis seems ok, however, is there any chance \u0027body_crypto_meta` could come back as NOT a dict but still truthy? if it does the ceyto_meta.get() will fire an exception. Maybe not, unless there is a json issue.\n\nMaybe we need some belts and braces here, just. in. case? Or maybe I\u0027m just over thinking thing :hmm:","commit_id":"428707d63c039123b1017be0f76a8959da8ae942"},{"author":{"_account_id":39146,"name":"Nathaniel Martes","display_name":"Nate Martes","email":"nmartes@NVIDIA.com","username":"nmartes"},"change_message_id":"2660f616573d9b26c640a9d559d9375bad093cd5","unresolved":false,"context_lines":[{"line_number":262,"context_line":"        # inform middlewares upstream that data is encrypted"},{"line_number":263,"context_line":"        if is_success(self._get_status_int()):"},{"line_number":264,"context_line":"            crypto_meta \u003d getattr(enc_input_proxy, \u0027body_crypto_meta\u0027, None)"},{"line_number":265,"context_line":"            cipher \u003d crypto_meta and crypto_meta.get(\u0027cipher\u0027)"},{"line_number":266,"context_line":"            if cipher:"},{"line_number":267,"context_line":"                mod_resp_headers.append((\u0027X-Backend-Crypto-Cipher\u0027, cipher))"},{"line_number":268,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"a1f40b7b_0d93a602","line":265,"in_reply_to":"27fe5280_72f07119","updated":"2026-06-10 15:29:34.000000000","message":"Yes I agree, I think we can add a wrapper around the statement to say:\n```python\ncipher \u003d isinstance(crypto_meta, dict) and crypto_meta.get(\u0027cipher\u0027)\n```\n\nWhich would make sure crypto_meta a `dict` and in the event it is not, it will return `False` instead of `None` which are both false-y values.","commit_id":"428707d63c039123b1017be0f76a8959da8ae942"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"f8a2bca21216036b11f9df3f88233995e5863a0a","unresolved":false,"context_lines":[{"line_number":262,"context_line":"        # inform middlewares upstream that data is encrypted"},{"line_number":263,"context_line":"        if is_success(self._get_status_int()):"},{"line_number":264,"context_line":"            crypto_meta \u003d getattr(enc_input_proxy, \u0027body_crypto_meta\u0027, None)"},{"line_number":265,"context_line":"            cipher \u003d crypto_meta and crypto_meta.get(\u0027cipher\u0027)"},{"line_number":266,"context_line":"            if cipher:"},{"line_number":267,"context_line":"                mod_resp_headers.append((\u0027X-Backend-Crypto-Cipher\u0027, cipher))"},{"line_number":268,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"ecbd022c_0aec97ea","line":265,"in_reply_to":"a1f40b7b_0d93a602","updated":"2026-06-22 21:25:53.000000000","message":"\u003e is there any chance \u0027body_crypto_meta` could come back as NOT a dict but still truthy?\n\nNope -- it gets set [in exactly one place](https://github.com/openstack/swift/blob/2.37.1/swift/common/middleware/crypto/encrypter.py#L86), and the function used to initialize it [always returns a dict, which in turn always has a `cipher` key](https://github.com/openstack/swift/blob/2.37.1/swift/common/middleware/crypto/crypto_utils.py#L94-L96).","commit_id":"428707d63c039123b1017be0f76a8959da8ae942"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"f2fb0105de662fec8a2d65751e7ea00836535cfb","unresolved":false,"context_lines":[{"line_number":262,"context_line":"        # inform middlewares upstream that data is encrypted"},{"line_number":263,"context_line":"        if is_success(self._get_status_int()):"},{"line_number":264,"context_line":"            crypto_meta \u003d getattr(enc_input_proxy, \u0027body_crypto_meta\u0027, None)"},{"line_number":265,"context_line":"            cipher \u003d isinstance(crypto_meta, dict) and crypto_meta.get(\u0027cipher\u0027)"},{"line_number":266,"context_line":"            if cipher:"},{"line_number":267,"context_line":"                mod_resp_headers.append((\u0027X-Backend-Crypto-Cipher\u0027, cipher))"},{"line_number":268,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"0a7b3e25_71be8e4f","line":265,"updated":"2026-06-10 16:59:43.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"6baa9466e6409fe9ffd8f660e7266906d3bf38c9"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"f8a2bca21216036b11f9df3f88233995e5863a0a","unresolved":true,"context_lines":[{"line_number":261,"context_line":""},{"line_number":262,"context_line":"        # inform middlewares upstream that data is encrypted"},{"line_number":263,"context_line":"        if is_success(self._get_status_int()):"},{"line_number":264,"context_line":"            crypto_meta \u003d getattr(enc_input_proxy, \u0027body_crypto_meta\u0027, None)"},{"line_number":265,"context_line":"            cipher \u003d (isinstance(crypto_meta, dict) and"},{"line_number":266,"context_line":"                      crypto_meta.get(\u0027cipher\u0027))"},{"line_number":267,"context_line":"            if cipher:"}],"source_content_type":"text/x-python","patch_set":6,"id":"4513e9e0_08f42889","line":264,"range":{"start_line":264,"start_character":26,"end_line":264,"end_character":33},"updated":"2026-06-22 21:25:53.000000000","message":"I guess this is to guard against empty uploads, where the input proxy isn\u0027t (necessarily?) read because the `Content-Length` is zero?\n\nKinda seems like we could piggy-back off the existing\n```\nif (is_success(self._get_status_int()) and\n        enc_input_proxy.plaintext_md5):\n```\nguard (even if `plaintext_md5` is a little non-obvious as a way to spell \"`_init_encryption_context` has been called\").","commit_id":"12ce21f1e6669aaa18907bcf58610d6b608cd63a"},{"author":{"_account_id":39146,"name":"Nathaniel Martes","display_name":"Nate Martes","email":"nmartes@NVIDIA.com","username":"nmartes"},"change_message_id":"a4591b5a748085d355bbcd828fc8b6581ec74dfa","unresolved":false,"context_lines":[{"line_number":261,"context_line":""},{"line_number":262,"context_line":"        # inform middlewares upstream that data is encrypted"},{"line_number":263,"context_line":"        if is_success(self._get_status_int()):"},{"line_number":264,"context_line":"            crypto_meta \u003d getattr(enc_input_proxy, \u0027body_crypto_meta\u0027, None)"},{"line_number":265,"context_line":"            cipher \u003d (isinstance(crypto_meta, dict) and"},{"line_number":266,"context_line":"                      crypto_meta.get(\u0027cipher\u0027))"},{"line_number":267,"context_line":"            if cipher:"}],"source_content_type":"text/x-python","patch_set":6,"id":"853da1c3_bde09b22","line":264,"range":{"start_line":264,"start_character":26,"end_line":264,"end_character":33},"in_reply_to":"4513e9e0_08f42889","updated":"2026-06-23 15:37:05.000000000","message":"I agree","commit_id":"12ce21f1e6669aaa18907bcf58610d6b608cd63a"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"f8a2bca21216036b11f9df3f88233995e5863a0a","unresolved":true,"context_lines":[{"line_number":263,"context_line":"        if is_success(self._get_status_int()):"},{"line_number":264,"context_line":"            crypto_meta \u003d getattr(enc_input_proxy, \u0027body_crypto_meta\u0027, None)"},{"line_number":265,"context_line":"            cipher \u003d (isinstance(crypto_meta, dict) and"},{"line_number":266,"context_line":"                      crypto_meta.get(\u0027cipher\u0027))"},{"line_number":267,"context_line":"            if cipher:"},{"line_number":268,"context_line":"                mod_resp_headers.append((\u0027X-Backend-Crypto-Cipher\u0027, cipher))"},{"line_number":269,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"7fb62f96_e84bf6c5","line":266,"updated":"2026-06-22 21:25:53.000000000","message":"... at which point these checks really start to feel paranoid -- if there\u0027s a `body_crypto_meta` attribute, it\u0027s always a dict and always has a `cipher` key.","commit_id":"12ce21f1e6669aaa18907bcf58610d6b608cd63a"},{"author":{"_account_id":39146,"name":"Nathaniel Martes","display_name":"Nate Martes","email":"nmartes@NVIDIA.com","username":"nmartes"},"change_message_id":"a4591b5a748085d355bbcd828fc8b6581ec74dfa","unresolved":false,"context_lines":[{"line_number":263,"context_line":"        if is_success(self._get_status_int()):"},{"line_number":264,"context_line":"            crypto_meta \u003d getattr(enc_input_proxy, \u0027body_crypto_meta\u0027, None)"},{"line_number":265,"context_line":"            cipher \u003d (isinstance(crypto_meta, dict) and"},{"line_number":266,"context_line":"                      crypto_meta.get(\u0027cipher\u0027))"},{"line_number":267,"context_line":"            if cipher:"},{"line_number":268,"context_line":"                mod_resp_headers.append((\u0027X-Backend-Crypto-Cipher\u0027, cipher))"},{"line_number":269,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"436eb52e_3142949d","line":266,"in_reply_to":"7fb62f96_e84bf6c5","updated":"2026-06-23 15:37:05.000000000","message":"Will change code to reflect this","commit_id":"12ce21f1e6669aaa18907bcf58610d6b608cd63a"}],"test/unit/common/middleware/crypto/test_encrypter.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"eb149e0c46d299c5d2ca701d5af65e0753949a1f","unresolved":false,"context_lines":[{"line_number":658,"context_line":"                return_value\u003dbody_key):"},{"line_number":659,"context_line":"            resp \u003d req.get_response(self.encrypter)"},{"line_number":660,"context_line":"        self.assertEqual(\u0027201 Created\u0027, resp.status)"},{"line_number":661,"context_line":"        self.assertEqual(Crypto.cipher, resp.headers[\u0027X-Backend-Crypto-Cipher\u0027])"},{"line_number":662,"context_line":""},{"line_number":663,"context_line":"    def test_POST_req(self):"},{"line_number":664,"context_line":"        body \u003d b\u0027FAKE APP\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"fe3636fb_7dd2f875","line":661,"updated":"2026-06-08 23:23:48.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"14ba1ae4d7225554904317060ba072e979114a7b"}],"test/unit/common/middleware/s3api/test_obj.py":[{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"fda740202443d552115c3a6fc52983770cc13c16","unresolved":true,"context_lines":[{"line_number":2074,"context_line":"        self.addCleanup(setattr, self.s3api, \u0027app\u0027, orig_app)"},{"line_number":2075,"context_line":""},{"line_number":2076,"context_line":"        self.swift.register("},{"line_number":2077,"context_line":"            \u0027HEAD\u0027, \u0027/v1/AUTH_test/bucket/test-object\u0027, swob.HTTPOk,"},{"line_number":2078,"context_line":"            self.response_headers, self.object_body)"},{"line_number":2079,"context_line":""},{"line_number":2080,"context_line":"        req \u003d Request.blank("}],"source_content_type":"text/x-python","patch_set":2,"id":"3c775a47_94582429","line":2077,"updated":"2026-06-09 14:49:20.000000000","message":"This registers a HEAD request...","commit_id":"14ba1ae4d7225554904317060ba072e979114a7b"},{"author":{"_account_id":39146,"name":"Nathaniel Martes","display_name":"Nate Martes","email":"nmartes@NVIDIA.com","username":"nmartes"},"change_message_id":"c5a00cd81e453ea037db6bdd9eab117b48fe3371","unresolved":false,"context_lines":[{"line_number":2074,"context_line":"        self.addCleanup(setattr, self.s3api, \u0027app\u0027, orig_app)"},{"line_number":2075,"context_line":""},{"line_number":2076,"context_line":"        self.swift.register("},{"line_number":2077,"context_line":"            \u0027HEAD\u0027, \u0027/v1/AUTH_test/bucket/test-object\u0027, swob.HTTPOk,"},{"line_number":2078,"context_line":"            self.response_headers, self.object_body)"},{"line_number":2079,"context_line":""},{"line_number":2080,"context_line":"        req \u003d Request.blank("}],"source_content_type":"text/x-python","patch_set":2,"id":"9b152907_4341fd82","line":2077,"in_reply_to":"3c775a47_94582429","updated":"2026-06-09 17:58:20.000000000","message":"Acknowledged","commit_id":"14ba1ae4d7225554904317060ba072e979114a7b"},{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"fda740202443d552115c3a6fc52983770cc13c16","unresolved":true,"context_lines":[{"line_number":2079,"context_line":""},{"line_number":2080,"context_line":"        req \u003d Request.blank("},{"line_number":2081,"context_line":"            \u0027/bucket/test-object\u0027,"},{"line_number":2082,"context_line":"            environ\u003d{\u0027REQUEST_METHOD\u0027: \u0027PUT\u0027},"},{"line_number":2083,"context_line":"            headers\u003d{\u0027Authorization\u0027: \u0027AWS test:tester:hmac\u0027,"},{"line_number":2084,"context_line":"                     \u0027Date\u0027: self.get_date_header()})"},{"line_number":2085,"context_line":"        status, headers, body \u003d self.call_s3api(req)"}],"source_content_type":"text/x-python","patch_set":2,"id":"391c40ff_850d3d0b","line":2082,"updated":"2026-06-09 14:49:20.000000000","message":"...but then a PUT request is used. I think the HEAD in line 2077 needs to be changed to PUT, tests will fail otherwise.","commit_id":"14ba1ae4d7225554904317060ba072e979114a7b"},{"author":{"_account_id":39146,"name":"Nathaniel Martes","display_name":"Nate Martes","email":"nmartes@NVIDIA.com","username":"nmartes"},"change_message_id":"c5a00cd81e453ea037db6bdd9eab117b48fe3371","unresolved":false,"context_lines":[{"line_number":2079,"context_line":""},{"line_number":2080,"context_line":"        req \u003d Request.blank("},{"line_number":2081,"context_line":"            \u0027/bucket/test-object\u0027,"},{"line_number":2082,"context_line":"            environ\u003d{\u0027REQUEST_METHOD\u0027: \u0027PUT\u0027},"},{"line_number":2083,"context_line":"            headers\u003d{\u0027Authorization\u0027: \u0027AWS test:tester:hmac\u0027,"},{"line_number":2084,"context_line":"                     \u0027Date\u0027: self.get_date_header()})"},{"line_number":2085,"context_line":"        status, headers, body \u003d self.call_s3api(req)"}],"source_content_type":"text/x-python","patch_set":2,"id":"518f1cba_2462f39b","line":2082,"in_reply_to":"391c40ff_850d3d0b","updated":"2026-06-09 17:58:20.000000000","message":"Acknowledged","commit_id":"14ba1ae4d7225554904317060ba072e979114a7b"},{"author":{"_account_id":38368,"name":"Christian Ohanaja","display_name":"Christian Ohanaja","email":"cohanaja@nvidia.com","username":"cohanaja"},"change_message_id":"bd01237352b2b32146e1dd808a275cb0c8acb63c","unresolved":true,"context_lines":[{"line_number":2222,"context_line":"        # Test that x-amz-server-side-encryption is included in the"},{"line_number":2223,"context_line":"        # response headers in PUT method."},{"line_number":2224,"context_line":""},{"line_number":2225,"context_line":"        class TestCryptoMiddleware(object):"},{"line_number":2226,"context_line":"            def __init__(self, app, cipher\u003d\u0027AES_CTR_256\u0027):"},{"line_number":2227,"context_line":"                self.app \u003d app"},{"line_number":2228,"context_line":"                self.cipher \u003d cipher"}],"source_content_type":"text/x-python","patch_set":11,"id":"f749bd9f_77649111","line":2225,"range":{"start_line":2225,"start_character":0,"end_line":2225,"end_character":43},"updated":"2026-08-18 02:47:13.000000000","message":"you could probably reuse the one we have in test_object_GET_x_server_side_encryption","commit_id":"9ae15c65cb65ed300796cf2cbdd79057b0fb4858"},{"author":{"_account_id":39146,"name":"Nathaniel Martes","display_name":"Nate Martes","email":"nmartes@NVIDIA.com","username":"nmartes"},"change_message_id":"5c41834a7e1aa1c7bbfc3c23a05127de19b5999f","unresolved":false,"context_lines":[{"line_number":2222,"context_line":"        # Test that x-amz-server-side-encryption is included in the"},{"line_number":2223,"context_line":"        # response headers in PUT method."},{"line_number":2224,"context_line":""},{"line_number":2225,"context_line":"        class TestCryptoMiddleware(object):"},{"line_number":2226,"context_line":"            def __init__(self, app, cipher\u003d\u0027AES_CTR_256\u0027):"},{"line_number":2227,"context_line":"                self.app \u003d app"},{"line_number":2228,"context_line":"                self.cipher \u003d cipher"}],"source_content_type":"text/x-python","patch_set":11,"id":"77899664_938c54b6","line":2225,"range":{"start_line":2225,"start_character":0,"end_line":2225,"end_character":43},"in_reply_to":"dff4f623_ad8dc0a9","updated":"2026-08-21 23:37:18.000000000","message":"Done","commit_id":"9ae15c65cb65ed300796cf2cbdd79057b0fb4858"},{"author":{"_account_id":39146,"name":"Nathaniel Martes","display_name":"Nate Martes","email":"nmartes@NVIDIA.com","username":"nmartes"},"change_message_id":"fcd10c3e912eabd45bd37710ffe6950b893dbb5c","unresolved":true,"context_lines":[{"line_number":2222,"context_line":"        # Test that x-amz-server-side-encryption is included in the"},{"line_number":2223,"context_line":"        # response headers in PUT method."},{"line_number":2224,"context_line":""},{"line_number":2225,"context_line":"        class TestCryptoMiddleware(object):"},{"line_number":2226,"context_line":"            def __init__(self, app, cipher\u003d\u0027AES_CTR_256\u0027):"},{"line_number":2227,"context_line":"                self.app \u003d app"},{"line_number":2228,"context_line":"                self.cipher \u003d cipher"}],"source_content_type":"text/x-python","patch_set":11,"id":"dff4f623_ad8dc0a9","line":2225,"range":{"start_line":2225,"start_character":0,"end_line":2225,"end_character":43},"in_reply_to":"f749bd9f_77649111","updated":"2026-08-21 23:05:51.000000000","message":"I think you are right, what might be even better is if I actually use the crypto middleware instead! 💡","commit_id":"9ae15c65cb65ed300796cf2cbdd79057b0fb4858"},{"author":{"_account_id":38368,"name":"Christian Ohanaja","display_name":"Christian Ohanaja","email":"cohanaja@nvidia.com","username":"cohanaja"},"change_message_id":"bd01237352b2b32146e1dd808a275cb0c8acb63c","unresolved":true,"context_lines":[{"line_number":2284,"context_line":"            \u0027AES256\u0027,"},{"line_number":2285,"context_line":"            headers[\u0027x-amz-server-side-encryption\u0027])"},{"line_number":2286,"context_line":""},{"line_number":2287,"context_line":"    def test_object_GET_x_server_side_encryption_no_encryption(self):"},{"line_number":2288,"context_line":"        # Test that x-amz-server-side-encryption is not included in the"},{"line_number":2289,"context_line":"        # response headers if the object is not encrypted in GET method."},{"line_number":2290,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"f4e30e44_19866692","line":2287,"range":{"start_line":2287,"start_character":0,"end_line":2287,"end_character":69},"updated":"2026-08-18 02:47:13.000000000","message":"I think\ntest_object_GET_x_server_side_encryption_no_encryption\ntest_object_HEAD_x_server_side_encryption_no_encryption\ntest_object_PUT_x_server_side_encryption_no_encryption\n\nare kind of superfluous in what they\u0027re doing... Although maybe I\u0027m just reading it wrong; it looks like it\u0027s moreso trying to assert \"when we don\u0027t encrypt something, it\u0027s not encrypted\". I can\u0027t argue against more insurance since it\u0027s Correct:tm:, but in my head it just feels kind of extra.\n\nAlso similar to last patch, these could probably condense pretty well\n\n```\n    def test_object_x_server_side_encryption_no_encryption(self):\n        # Test that x-amz-server-side-encryption is not included in the\n        # response headers if the object is not encrypted.\n\n        for method, response_class in (\n                (\u0027GET\u0027, swob.HTTPOk),\n                (\u0027HEAD\u0027, swob.HTTPOk),\n                (\u0027PUT\u0027, swob.HTTPCreated)):\n            self.swift.register(\n                method, \u0027/v1/AUTH_test/bucket/test-object\u0027, response_class,\n                self.response_headers, self.object_body)\n\n            req \u003d Request.blank(\n                \u0027/bucket/test-object\u0027,\n                environ\u003d{\u0027REQUEST_METHOD\u0027: method},\n                headers\u003d{\u0027Authorization\u0027: \u0027AWS test:tester:hmac\u0027,\n                         \u0027Date\u0027: self.get_date_header()})\n            status, headers, body \u003d self.call_s3api(req)\n\n            self.assertEqual(status, \u0027200 OK\u0027)\n            self.assertNotIn(\n                \u0027X-Object-Sysmeta-Crypto-Body-Meta\u0027, headers)\n            self.assertNotIn(\u0027x-amz-server-side-encryption\u0027, headers)\n```","commit_id":"9ae15c65cb65ed300796cf2cbdd79057b0fb4858"},{"author":{"_account_id":39146,"name":"Nathaniel Martes","display_name":"Nate Martes","email":"nmartes@NVIDIA.com","username":"nmartes"},"change_message_id":"5c41834a7e1aa1c7bbfc3c23a05127de19b5999f","unresolved":false,"context_lines":[{"line_number":2284,"context_line":"            \u0027AES256\u0027,"},{"line_number":2285,"context_line":"            headers[\u0027x-amz-server-side-encryption\u0027])"},{"line_number":2286,"context_line":""},{"line_number":2287,"context_line":"    def test_object_GET_x_server_side_encryption_no_encryption(self):"},{"line_number":2288,"context_line":"        # Test that x-amz-server-side-encryption is not included in the"},{"line_number":2289,"context_line":"        # response headers if the object is not encrypted in GET method."},{"line_number":2290,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"9d45d4a6_3ba43dbb","line":2287,"range":{"start_line":2287,"start_character":0,"end_line":2287,"end_character":69},"in_reply_to":"b0427b57_56529176","updated":"2026-08-21 23:37:18.000000000","message":"Done","commit_id":"9ae15c65cb65ed300796cf2cbdd79057b0fb4858"},{"author":{"_account_id":39146,"name":"Nathaniel Martes","display_name":"Nate Martes","email":"nmartes@NVIDIA.com","username":"nmartes"},"change_message_id":"fcd10c3e912eabd45bd37710ffe6950b893dbb5c","unresolved":true,"context_lines":[{"line_number":2284,"context_line":"            \u0027AES256\u0027,"},{"line_number":2285,"context_line":"            headers[\u0027x-amz-server-side-encryption\u0027])"},{"line_number":2286,"context_line":""},{"line_number":2287,"context_line":"    def test_object_GET_x_server_side_encryption_no_encryption(self):"},{"line_number":2288,"context_line":"        # Test that x-amz-server-side-encryption is not included in the"},{"line_number":2289,"context_line":"        # response headers if the object is not encrypted in GET method."},{"line_number":2290,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"b0427b57_56529176","line":2287,"range":{"start_line":2287,"start_character":0,"end_line":2287,"end_character":69},"in_reply_to":"f4e30e44_19866692","updated":"2026-08-21 23:05:51.000000000","message":"yea I think these are much better since they all are looking for the same thing. Thanks!","commit_id":"9ae15c65cb65ed300796cf2cbdd79057b0fb4858"}]}
