From 9fc17513fe69a1fd26fc522f9862af3e0ebfd2c4 Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Wed, 1 Dec 2021 21:39:59 -0500 Subject: copy list for __iadd__ Fixed issue where a list mapped with :func:`_orm.relationship` would go into an endless loop if in-place added to itself, i.e. the ``+=`` operator were used, as well as if ``.extend()`` were given the same list. Fixes: #7389 Change-Id: Idd5118420f8bc684d1ee36b2b6d4c5812f36cc4c --- test/orm/test_collection.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'test') diff --git a/test/orm/test_collection.py b/test/orm/test_collection.py index 9babe6366..806d98a69 100644 --- a/test/orm/test_collection.py +++ b/test/orm/test_collection.py @@ -2500,6 +2500,19 @@ class CustomCollectionsTest(fixtures.MappedTest): assert control == p.children assert control == list(p.children) + # test #7389 + if hasattr(p.children, "__iadd__"): + control += control + p.children += p.children + assert control == list(p.children) + + control[:] = [o] + p.children[:] = [o] + if hasattr(p.children, "extend"): + control.extend(control) + p.children.extend(p.children) + assert control == list(p.children) + def test_custom(self): someothertable, sometable = ( self.tables.someothertable, -- cgit v1.2.1