)]}'
{"swift/common/utils.py":[{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"c482f1eea24f4429a5dbe5fb7ec41fd545af80f9","unresolved":false,"context_lines":[{"line_number":3963,"context_line":"    return md5_sockfd"},{"line_number":3964,"context_line":""},{"line_number":3965,"context_line":""},{"line_number":3966,"context_line":"def validate_query_string(environ):"},{"line_number":3967,"context_line":"    \u0027\u0027\u0027validate \u0027limit\u0027 parameter to be integer\u0027\u0027\u0027"},{"line_number":3968,"context_line":"    query_string \u003d environ.get(\u0027QUERY_STRING\u0027, None)"},{"line_number":3969,"context_line":"    if query_string:"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba0121b8_3d78778f","line":3966,"range":{"start_line":3966,"start_character":4,"end_line":3966,"end_character":25},"updated":"2016-04-04 06:00:09.000000000","message":"You could still use urllib.parse.parse_qsl or even better use the builtin params dict in the request. In this case you won\u0027t need this function at all (have a look at my comment in the other file).","commit_id":"7a98ff74ddef34157249ae28b007b8dd801af63d"},{"author":{"_account_id":21021,"name":"Ankur Jain","email":"j.ankur@nectechnologies.in","username":"AnkurJain"},"change_message_id":"4afdd8949da3774e2c58eb6e490aef72142e1b88","unresolved":false,"context_lines":[{"line_number":3963,"context_line":"    return md5_sockfd"},{"line_number":3964,"context_line":""},{"line_number":3965,"context_line":""},{"line_number":3966,"context_line":"def validate_query_string(environ):"},{"line_number":3967,"context_line":"    \u0027\u0027\u0027validate \u0027limit\u0027 parameter to be integer\u0027\u0027\u0027"},{"line_number":3968,"context_line":"    query_string \u003d environ.get(\u0027QUERY_STRING\u0027, None)"},{"line_number":3969,"context_line":"    if query_string:"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a061dce_b8abda88","line":3966,"range":{"start_line":3966,"start_character":4,"end_line":3966,"end_character":25},"in_reply_to":"ba0121b8_3d78778f","updated":"2016-04-05 08:48:39.000000000","message":"I think that i need this function because write now i\u0027m working for limit parameter but in future there may be more things which needs to be fixed in QueryString. So one can directly make changes in this function.","commit_id":"7a98ff74ddef34157249ae28b007b8dd801af63d"},{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"c5d7861dfe5245c670c866c49e1b0ca39675fef8","unresolved":false,"context_lines":[{"line_number":3963,"context_line":"    return md5_sockfd"},{"line_number":3964,"context_line":""},{"line_number":3965,"context_line":""},{"line_number":3966,"context_line":"def validate_query_string(environ):"},{"line_number":3967,"context_line":"    \u0027\u0027\u0027validate \u0027limit\u0027 parameter to be integer\u0027\u0027\u0027"},{"line_number":3968,"context_line":"    query_string \u003d environ.get(\u0027QUERY_STRING\u0027, None)"},{"line_number":3969,"context_line":"    if query_string:"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a122d0e_7a4e1f70","line":3966,"updated":"2016-04-19 06:33:05.000000000","message":"Instead of using environ as arg, you could simply use the request - it includes request.environ, as well as some other useful data.\n\nAs said earlier, please avoid reinventing the wheel. Just use something like this - the query string is already parsed earlier, there is no need to do it again:\n\n limit \u003d request.params.get(\u0027limit\u0027, None)\n if limit is not None and not limit.isdigit():\n     return False\n return True\n\nAnd then you won\u0027t need the for-loop and the try..except block.","commit_id":"8c8d7e7e3fc2a254bffb9f48fc8116d01935b302"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"cbb7f10a52dd8f3eeaf9a1c585b4004f1eb9d522","unresolved":false,"context_lines":[{"line_number":3966,"context_line":"def validate_query_string(req):"},{"line_number":3967,"context_line":"    \u0027\u0027\u0027validate \u0027limit\u0027 parameter to be integer\u0027\u0027\u0027"},{"line_number":3968,"context_line":"    limit \u003d req.params.get(\u0027limit\u0027, None)"},{"line_number":3969,"context_line":"    if limit is not None and not limit.isdigit():"},{"line_number":3970,"context_line":"        return False"},{"line_number":3971,"context_line":"    return True"}],"source_content_type":"text/x-python","patch_set":5,"id":"bab6814e_c00e4e3a","line":3969,"updated":"2016-05-19 23:20:09.000000000","message":"I might have gone for\n\n return limit is None or limit.isdigit()\n\nbut this is clear enough.","commit_id":"8b6e729619f8e9b1bf0864f04200b6d164fcbb0a"}],"swift/container/server.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"ed0359394b6edd5eb9a80db260924b98a294de8b","unresolved":false,"context_lines":[{"line_number":476,"context_line":"        given_limit \u003d get_param(req, \u0027limit\u0027)"},{"line_number":477,"context_line":"        reverse \u003d config_true_value(get_param(req, \u0027reverse\u0027))"},{"line_number":478,"context_line":"        if given_limit:"},{"line_number":479,"context_line":"            if not given_limit.isdigit():"},{"line_number":480,"context_line":"                return HTTPBadRequest(body\u003d\u0027Bad limit\u0027)"},{"line_number":481,"context_line":"            limit \u003d int(given_limit)"},{"line_number":482,"context_line":"            if limit \u003e constraints.CONTAINER_LISTING_LIMIT:"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a57fde8_bf548354","line":479,"updated":"2017-01-12 20:08:33.000000000","message":"sorry i\u0027m dumb, I didn\u0027t realize this addressed sam\u0027s concern about \"/a/c?limit\u003d\"\n\nShould requests for \"/a/c?limit\u003dNone\" *definitely* 400?","commit_id":"f6175b97e69db6cee7fc4ff6ae05ba0772fa2ee4"}],"swift/proxy/server.py":[{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"c482f1eea24f4429a5dbe5fb7ec41fd545af80f9","unresolved":false,"context_lines":[{"line_number":334,"context_line":"                return HTTPBadRequest(request\u003dreq,"},{"line_number":335,"context_line":"                                      body\u003d\u0027Invalid Content-Length\u0027)"},{"line_number":336,"context_line":""},{"line_number":337,"context_line":"            if not validate_query_string(req.environ):"},{"line_number":338,"context_line":"                self.logger.increment(\u0027errors\u0027)"},{"line_number":339,"context_line":"                return HTTPBadRequest(request\u003dreq,"},{"line_number":340,"context_line":"                                      body\u003d\u0027Invalid Query_String\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba0121b8_3d51970f","line":337,"updated":"2016-04-04 06:00:09.000000000","message":"You could completely remove your validate_query_string function and instead use the already builtin params dict. For example:\n\n limit \u003d req.params.get(\u0027limit\u0027)\n if limit and not limit.isdigit():","commit_id":"7a98ff74ddef34157249ae28b007b8dd801af63d"},{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"c482f1eea24f4429a5dbe5fb7ec41fd545af80f9","unresolved":false,"context_lines":[{"line_number":337,"context_line":"            if not validate_query_string(req.environ):"},{"line_number":338,"context_line":"                self.logger.increment(\u0027errors\u0027)"},{"line_number":339,"context_line":"                return HTTPBadRequest(request\u003dreq,"},{"line_number":340,"context_line":"                                      body\u003d\u0027Invalid Query_String\u0027)"},{"line_number":341,"context_line":""},{"line_number":342,"context_line":"            try:"},{"line_number":343,"context_line":"                if not check_utf8(req.path_info):"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba0121b8_dd405b38","line":340,"updated":"2016-04-04 06:00:09.000000000","message":"Please change this to something like:\n\n Invalid limit parameter in query string","commit_id":"7a98ff74ddef34157249ae28b007b8dd801af63d"},{"author":{"_account_id":21021,"name":"Ankur Jain","email":"j.ankur@nectechnologies.in","username":"AnkurJain"},"change_message_id":"4afdd8949da3774e2c58eb6e490aef72142e1b88","unresolved":false,"context_lines":[{"line_number":337,"context_line":"            if not validate_query_string(req.environ):"},{"line_number":338,"context_line":"                self.logger.increment(\u0027errors\u0027)"},{"line_number":339,"context_line":"                return HTTPBadRequest(request\u003dreq,"},{"line_number":340,"context_line":"                                      body\u003d\u0027Invalid Query_String\u0027)"},{"line_number":341,"context_line":""},{"line_number":342,"context_line":"            try:"},{"line_number":343,"context_line":"                if not check_utf8(req.path_info):"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a061dce_189da665","line":340,"in_reply_to":"ba0121b8_dd405b38","updated":"2016-04-05 08:48:39.000000000","message":"I\u0027ll make changes regarding this !","commit_id":"7a98ff74ddef34157249ae28b007b8dd801af63d"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"cbb7f10a52dd8f3eeaf9a1c585b4004f1eb9d522","unresolved":false,"context_lines":[{"line_number":337,"context_line":"            if not validate_query_string(req):"},{"line_number":338,"context_line":"                self.logger.increment(\u0027errors\u0027)"},{"line_number":339,"context_line":"                return HTTPBadRequest(request\u003dreq,"},{"line_number":340,"context_line":"                                      body\u003d\u0027Invalid Query_String\u0027)"},{"line_number":341,"context_line":""},{"line_number":342,"context_line":"            try:"},{"line_number":343,"context_line":"                if not check_utf8(req.path_info):"}],"source_content_type":"text/x-python","patch_set":5,"id":"bab6814e_e350bcd6","line":340,"range":{"start_line":340,"start_character":52,"end_line":340,"end_character":64},"updated":"2016-05-19 23:20:09.000000000","message":"Are there other parts of the query string we want to validate? Or can we take Christian\u0027s suggestion from patchset 3? I.e. use something like \"Invalid limit parameter in query string\", which is more precise and actionable.\n\nEven if we keep it general, \"Query_String\" feels awkward; I think I prefer \"query string\" or even just \"query\" (which seems consistent with various RFCs).","commit_id":"8b6e729619f8e9b1bf0864f04200b6d164fcbb0a"}],"test/unit/common/test_utils.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"cbb7f10a52dd8f3eeaf9a1c585b4004f1eb9d522","unresolved":false,"context_lines":[{"line_number":5556,"context_line":"        req \u003d Request(env)"},{"line_number":5557,"context_line":"        is_valid \u003d utils.validate_query_string(req)"},{"line_number":5558,"context_line":"        self.assertEqual(is_valid, True)"},{"line_number":5559,"context_line":""},{"line_number":5560,"context_line":"    def test_validate_query_string_float(self):"},{"line_number":5561,"context_line":"        env \u003d {\u0027QUERY_STRING\u0027: \u0027limit\u003d1.2\u0027}"},{"line_number":5562,"context_line":"        req \u003d Request(env)"}],"source_content_type":"text/x-python","patch_set":5,"id":"bab6814e_23dac44c","line":5559,"updated":"2016-05-19 23:20:09.000000000","message":"Maybe worth adding a test for something like limit\u003d-1?","commit_id":"8b6e729619f8e9b1bf0864f04200b6d164fcbb0a"}]}
