]> granicus.if.org Git - python/commitdiff
Properly detect recursive structures. Adopted from patch #465298.
authorMartin v. Löwis <martin@v.loewis.de>
Sun, 30 Sep 2001 20:15:41 +0000 (20:15 +0000)
committerMartin v. Löwis <martin@v.loewis.de>
Sun, 30 Sep 2001 20:15:41 +0000 (20:15 +0000)
Lib/xmlrpclib.py

index 9f96163be13eb99d5a38d959dfcce791bce893a9..ea4f9323a9ce715b9782bbd0b621dd44e6a502b4 100644 (file)
@@ -490,6 +490,10 @@ class Marshaller:
                 raise TypeError, "cannot marshal recursive data structures"
             self.memo[i] = None
 
+    def endcontainer(self, value):
+        if value:
+            del self.memo[id(value)]
+
     def dump_array(self, value):
         self.container(value)
         write = self.write
@@ -497,6 +501,7 @@ class Marshaller:
         for v in value:
             self.__dump(v)
         write("</data></array></value>\n")
+        self.endcontainer(value)
     dispatch[TupleType] = dump_array
     dispatch[ListType] = dump_array
 
@@ -513,6 +518,7 @@ class Marshaller:
             self.__dump(v)
             write("</member>\n")
         write("</struct></value>\n")
+        self.endcontainer(value)
     dispatch[DictType] = dump_struct
 
     def dump_instance(self, value):