Selaa lähdekoodia

Fixes infinite loop in safe_str. Closes #481

Ask Solem 13 vuotta sitten
vanhempi
commit
796571ce6c
1 muutettua tiedostoa jossa 8 lisäystä ja 3 poistoa
  1. 8 3
      celery/utils/encoding.py

+ 8 - 3
celery/utils/encoding.py

@@ -11,17 +11,22 @@ def default_encoding():
 def safe_str(s, errors="replace"):
     if not isinstance(s, basestring):
         return safe_repr(s, errors)
+    return _safe_str(s, errors)
+
+
+def _safe_str(s, errors="replace"):
     encoding = default_encoding()
     try:
         if isinstance(s, unicode):
             return s.encode(encoding, errors)
         return unicode(s, encoding, errors)
-    except Exception:
-        return "<Unrepresentable %r: %r>" % (type(s), traceback.format_stack())
+    except Exception, exc:
+        return "<Unrepresentable %r: %r %r>" % (
+                type(s), exc, "\n".join(traceback.format_stack()))
 
 
 def safe_repr(o, errors="replace"):
     try:
         return repr(o)
     except Exception:
-        return safe_str(o, errors)
+        return _safe_str(o, errors)