)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":597,"name":"Pete Zaitcev","email":"zaitcev@kotori.zaitcev.us","username":"zaitcev"},"change_message_id":"f3be71eac55a1b064f6d694c3bec10ed9af6e8a7","unresolved":false,"context_lines":[{"line_number":24,"context_line":"Swift on py3 should not exhibit this behavior, as we so"},{"line_number":25,"context_line":"thoroughly re-write the request line to avoid hitting"},{"line_number":26,"context_line":"https://bugs.python.org/issue33973."},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"Now, always parse and re-encode the query string in bufferedhttp. This"},{"line_number":29,"context_line":"prevents any errors on object requests and cleans up any callers that"},{"line_number":30,"context_line":"might use bufferedhttp directly."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"5faad753_42a1b745","line":27,"updated":"2019-09-13 20:10:30.000000000","message":"Yeah, but this is not enough, is it? We do not return these from listings, but clients can form the offending sequences all on their own.... I think. Might as well just remove both of these paragraphs.","commit_id":"49f62f6ab7fd1b833e9b5bfbcaafa4b45b592d34"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"1776041b76b95b2b89d32fb7c65c069b0e35a158","unresolved":false,"context_lines":[{"line_number":24,"context_line":"Swift on py3 should not exhibit this behavior, as we so"},{"line_number":25,"context_line":"thoroughly re-write the request line to avoid hitting"},{"line_number":26,"context_line":"https://bugs.python.org/issue33973."},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"Now, always parse and re-encode the query string in bufferedhttp. This"},{"line_number":29,"context_line":"prevents any errors on object requests and cleans up any callers that"},{"line_number":30,"context_line":"might use bufferedhttp directly."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"5faad753_c570510b","line":27,"in_reply_to":"5faad753_42a1b745","updated":"2019-09-13 21:08:27.000000000","message":"True enough -- I was approaching this mainly from the perspective of wanting to fix the stable gates and assessing which test jobs may or may not be affected.","commit_id":"49f62f6ab7fd1b833e9b5bfbcaafa4b45b592d34"}],"test/unit/common/test_bufferedhttp.py":[{"author":{"_account_id":597,"name":"Pete Zaitcev","email":"zaitcev@kotori.zaitcev.us","username":"zaitcev"},"change_message_id":"f3be71eac55a1b064f6d694c3bec10ed9af6e8a7","unresolved":false,"context_lines":[{"line_number":58,"context_line":"                    line \u003d fp.readline()"},{"line_number":59,"context_line":"                    path \u003d (b\u0027/dev/\u0027 + expected_par +"},{"line_number":60,"context_line":"                            b\u0027/path/..%25/?omg\u003d\u0026no\u003d%7F\u0026%FF\u003d%FF\u0026no\u003d%25ff\u0027)"},{"line_number":61,"context_line":"                    self.assertEqual("},{"line_number":62,"context_line":"                        line,"},{"line_number":63,"context_line":"                        b\u0027PUT \u0027 + path + b\u0027 HTTP/1.1\\r\\n\u0027)"},{"line_number":64,"context_line":"                    headers \u003d {}"}],"source_content_type":"text/x-python","patch_set":1,"id":"5faad753_e204634c","line":61,"updated":"2019-09-13 20:10:30.000000000","message":"One thing that bothers me about this is that the order of query parameters is not guaranteed anymore. In theory urlencode() may be returning no\u003d\u0026omg\u003d easily. Oh well.","commit_id":"49f62f6ab7fd1b833e9b5bfbcaafa4b45b592d34"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"1776041b76b95b2b89d32fb7c65c069b0e35a158","unresolved":false,"context_lines":[{"line_number":58,"context_line":"                    line \u003d fp.readline()"},{"line_number":59,"context_line":"                    path \u003d (b\u0027/dev/\u0027 + expected_par +"},{"line_number":60,"context_line":"                            b\u0027/path/..%25/?omg\u003d\u0026no\u003d%7F\u0026%FF\u003d%FF\u0026no\u003d%25ff\u0027)"},{"line_number":61,"context_line":"                    self.assertEqual("},{"line_number":62,"context_line":"                        line,"},{"line_number":63,"context_line":"                        b\u0027PUT \u0027 + path + b\u0027 HTTP/1.1\\r\\n\u0027)"},{"line_number":64,"context_line":"                    headers \u003d {}"}],"source_content_type":"text/x-python","patch_set":1,"id":"5faad753_e5046d4c","line":61,"in_reply_to":"5faad753_e204634c","updated":"2019-09-13 21:08:27.000000000","message":"One of the nice things about parse_qsl -- it not only keeps duplicate keys but also preserves the order of keys. Meanwhile, urlencode just walks through the list in order... so I think we\u0027re actually pretty safe here.","commit_id":"49f62f6ab7fd1b833e9b5bfbcaafa4b45b592d34"}]}
