changeset 399:3510257d57d3

Fix for memory leak reported in #128. Thanks to Manlio Perillo for reporting the problem.
author cmlenz
date Fri, 18 Jul 2008 13:09:21 +0000
parents bedf755add6e
children 7826d8e9998f
files ChangeLog babel/localedata.py
diffstat 2 files changed, 10 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog
+++ b/ChangeLog
@@ -14,6 +14,8 @@
  * Currency symbol definitions that is defined with choice patterns in the
    CLDR data are no longer imported, so the symbol code will be used instead.
  * Fixed quarter support in date formatting.
+ * Fixed a serious memory leak that was introduces by the support for CLDR
+   aliases in 0.9.3 (ticket #128).
 
 
 Version 0.9.3
--- a/babel/localedata.py
+++ b/babel/localedata.py
@@ -174,6 +174,9 @@
             data = data[key]
         if isinstance(data, Alias):
             data = data.resolve(base)
+        elif isinstance(data, tuple):
+            alias, others = data
+            data = alias.resolve(base)
         return data
 
 
@@ -185,19 +188,21 @@
     def __init__(self, data, base=None):
         dict.__init__(self, data)
         if base is None:
-            base = self
+            base = data
         self.base = base
 
     def __getitem__(self, key):
-        val = dict.__getitem__(self, key)
+        orig = val = dict.__getitem__(self, key)
         if isinstance(val, Alias): # resolve an alias
             val = val.resolve(self.base)
         if isinstance(val, tuple): # Merge a partial dict with an alias
             alias, others = val
             val = alias.resolve(self.base).copy()
             merge(val, others)
-        if isinstance(val, dict): # Return a nested alias-resolving dict
+        if type(val) is dict: # Return a nested alias-resolving dict
             val = LocaleDataDict(val, base=self.base)
+        if val is not orig:
+            self[key] = val
         return val
 
     def copy(self):
Copyright (C) 2012-2017 Edgewall Software