)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"d2b47da77b247034213f2e00ea95feb9642fd301","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Infinite recursion is possible if you try to deepcopy a"},{"line_number":10,"context_line":"QuotaImageTagsProxy object, which is something that happens when using"},{"line_number":11,"context_line":"oslo.policy 1.41.3 and beyond."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"By adding a __gettattribute__ within the __getattr__ method we can break"},{"line_number":14,"context_line":"the loop when the name of the attribute is \u0027tags\u0027."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"3f79a3b5_94d9ab82","line":11,"range":{"start_line":11,"start_character":15,"end_line":11,"end_character":16},"updated":"2018-12-13 21:19:31.000000000","message":"1.43.1\n\nWhen we released 1.43.0, we noticed a possible sensitivity issue via a keystone unit test trying to consume that version. In the fix, we were programming defensively to deep copy so that we were operating and logging on a completely different object. The reason being that the target data can positively or negatively impact exposure to the API if specific attributes are changed, even accidentally, before actual enforcement (logging the data is taking place before enforcement).\n\nTo prevent that, we wanted to make sure we operated solely on a copy of the data and not the thing that way is used to determine the authorization of the API.\n\nhttps://review.openstack.org/#/c/623081/3","commit_id":"a1e49fc2e06d2643e63827bb5bdaf036e1dcd490"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"29e28463a76d51f52a06c9a2c1a5e024129cc332","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Infinite recursion is possible if you try to deepcopy a"},{"line_number":10,"context_line":"QuotaImageTagsProxy object, which is something that happens when using"},{"line_number":11,"context_line":"oslo.policy 1.41.3 and beyond."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"By adding a __gettattribute__ within the __getattr__ method we can break"},{"line_number":14,"context_line":"the loop when the name of the attribute is \u0027tags\u0027."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"3f79a3b5_94f52bcc","line":11,"range":{"start_line":11,"start_character":15,"end_line":11,"end_character":16},"in_reply_to":"3f79a3b5_94d9ab82","updated":"2018-12-13 21:26:57.000000000","message":"Was a typo. Twice. I had the right thing in my head. *shrug*\n\nI think doing the copy is a good idea. Glance having objects that are not copyable is a glance bug. So we should definitely fix it in glance, not elsewhere.","commit_id":"a1e49fc2e06d2643e63827bb5bdaf036e1dcd490"}],"glance/quota/__init__.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"7487245e0cce963cd72b85ff0e654ee9bd58f2c4","unresolved":false,"context_lines":[{"line_number":166,"context_line":""},{"line_number":167,"context_line":"    def __getattr__(self, name):"},{"line_number":168,"context_line":"        # Use __getattribute__ for \u0027tags\u0027 in case tags itself"},{"line_number":169,"context_line":"        # is request, which may happen during a deepcopy() and"},{"line_number":170,"context_line":"        # similar operations."},{"line_number":171,"context_line":"        if name \u003d\u003d \u0027tags\u0027:"},{"line_number":172,"context_line":"            return self.__getattribute__(\u0027tags\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f79a3b5_b22da292","line":169,"range":{"start_line":169,"start_character":13,"end_line":169,"end_character":20},"updated":"2018-12-17 20:46:27.000000000","message":"requested","commit_id":"c9a0904cf216a094892970624c2f7e2d4d490647"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"68acf0d9561dd6f73be7adab9a832f1a9c5551d9","unresolved":false,"context_lines":[{"line_number":171,"context_line":"        try:"},{"line_number":172,"context_line":"            tags \u003d self.__getattribute__(\u0027tags\u0027)"},{"line_number":173,"context_line":"        except AttributeError:"},{"line_number":174,"context_line":"            raise TypeError(\u0027QuotaImageTagsProxy has no tags.\u0027)"},{"line_number":175,"context_line":"        return getattr(tags, name)"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3f79a3b5_01862616","side":"PARENT","line":174,"updated":"2018-12-21 19:27:18.000000000","message":"Is this only ever going to affect developers? Or does removing this impact external things, too?","commit_id":"044d6b45f98238f4a5745922ef93223d05771d4c"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"f94cbdc3dfd9be71f7c96c1359b4d3a575b2370e","unresolved":false,"context_lines":[{"line_number":171,"context_line":"        try:"},{"line_number":172,"context_line":"            tags \u003d self.__getattribute__(\u0027tags\u0027)"},{"line_number":173,"context_line":"        except AttributeError:"},{"line_number":174,"context_line":"            raise TypeError(\u0027QuotaImageTagsProxy has no tags.\u0027)"},{"line_number":175,"context_line":"        return getattr(tags, name)"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3f79a3b5_c4a91c77","side":"PARENT","line":174,"in_reply_to":"3f79a3b5_01862616","updated":"2018-12-21 20:58:13.000000000","message":"This was an earlier fix to the infinite loop problem, in https://review.openstack.org/#/c/625086/\n\nIt wasn\u0027t really the right fix, despite mostly working.","commit_id":"044d6b45f98238f4a5745922ef93223d05771d4c"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"5831c3e7b40a65f4712efc05e707f52177d8b4e3","unresolved":false,"context_lines":[{"line_number":171,"context_line":"        try:"},{"line_number":172,"context_line":"            tags \u003d self.__getattribute__(\u0027tags\u0027)"},{"line_number":173,"context_line":"        except AttributeError:"},{"line_number":174,"context_line":"            raise TypeError(\u0027QuotaImageTagsProxy has no tags.\u0027)"},{"line_number":175,"context_line":"        return getattr(tags, name)"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3f79a3b5_a7166245","side":"PARENT","line":174,"in_reply_to":"3f79a3b5_c4a91c77","updated":"2018-12-21 21:49:08.000000000","message":"Aha, got it.\n\nThanks","commit_id":"044d6b45f98238f4a5745922ef93223d05771d4c"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"68acf0d9561dd6f73be7adab9a832f1a9c5551d9","unresolved":false,"context_lines":[{"line_number":167,"context_line":"    def __getattr__(self, name):"},{"line_number":168,"context_line":"        # Protect against deepcopy, which calls getattr. __getattr__"},{"line_number":169,"context_line":"        # is only called when an attribute is not \"normal\", so when"},{"line_number":170,"context_line":"        # self.tags is called, this is not."},{"line_number":171,"context_line":"        if name \u003d\u003d \u0027tags\u0027:"},{"line_number":172,"context_line":"            try:"},{"line_number":173,"context_line":"                return self.__getattribute__(\u0027tags\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"3f79a3b5_019dc669","line":170,"updated":"2018-12-21 19:27:18.000000000","message":"Interesting...","commit_id":"deffb09871c9460497929c57bd82ca78d1c3177f"}]}
