Fixed #6071 -- Fixed another infinite recursion problem in SafeString and

SafeUnicode. Thanks, Trey Long.


git-svn-id: http://code.djangoproject.com/svn/django/trunk@6845 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
Malcolm Tredinnick 2007-12-02 20:17:10 +00:00
parent 51dc4ecf94
commit 2e62b84acc
3 changed files with 24 additions and 10 deletions

View File

@ -207,6 +207,7 @@ answer newbie questions, and generally made Django that much better:
Waylan Limberg <waylan@gmail.com> Waylan Limberg <waylan@gmail.com>
limodou limodou
Philip Lindborg <philip.lindborg@gmail.com> Philip Lindborg <philip.lindborg@gmail.com>
Trey Long <trey@ktrl.com>
msaelices <msaelices@gmail.com> msaelices <msaelices@gmail.com>
Matt McClanahan <http://mmcc.cx/> Matt McClanahan <http://mmcc.cx/>
Martin Maney <http://www.chipy.org/Martin_Maney> Martin Maney <http://www.chipy.org/Martin_Maney>

View File

@ -34,13 +34,13 @@ class SafeString(str, SafeData):
Concatenating a safe string with another safe string or safe unicode Concatenating a safe string with another safe string or safe unicode
object is safe. Otherwise, the result is no longer safe. object is safe. Otherwise, the result is no longer safe.
""" """
t = super(SafeString, self).__add__(rhs)
if isinstance(rhs, SafeUnicode): if isinstance(rhs, SafeUnicode):
return SafeUnicode(self + rhs) return SafeUnicode(t)
elif isinstance(rhs, SafeString): elif isinstance(rhs, SafeString):
return SafeString(self + rhs) return SafeString(t)
else: return t
return super(SafeString, self).__add__(rhs)
def _proxy_method(self, *args, **kwargs): def _proxy_method(self, *args, **kwargs):
""" """
Wrap a call to a normal unicode method up so that we return safe Wrap a call to a normal unicode method up so that we return safe
@ -66,11 +66,11 @@ class SafeUnicode(unicode, SafeData):
Concatenating a safe unicode object with another safe string or safe Concatenating a safe unicode object with another safe string or safe
unicode object is safe. Otherwise, the result is no longer safe. unicode object is safe. Otherwise, the result is no longer safe.
""" """
t = super(SafeUnicode, self).__add__(rhs)
if isinstance(rhs, SafeData): if isinstance(rhs, SafeData):
return SafeUnicode(self + rhs) return SafeUnicode(t)
else: return t
return super(SafeUnicode, self).__add__(rhs)
def _proxy_method(self, *args, **kwargs): def _proxy_method(self, *args, **kwargs):
""" """
Wrap a call to a normal unicode method up so that we return safe Wrap a call to a normal unicode method up so that we return safe

View File

@ -43,7 +43,7 @@ u'django'
Translating a string requiring no auto-escaping shouldn't change the "safe" Translating a string requiring no auto-escaping shouldn't change the "safe"
status. status.
>>> from django.utils.safestring import mark_safe >>> from django.utils.safestring import mark_safe, SafeString
>>> s = mark_safe('Password') >>> s = mark_safe('Password')
>>> type(s) >>> type(s)
<class 'django.utils.safestring.SafeString'> <class 'django.utils.safestring.SafeString'>
@ -51,6 +51,19 @@ status.
>>> type(ugettext(s)) >>> type(ugettext(s))
<class 'django.utils.safestring.SafeUnicode'> <class 'django.utils.safestring.SafeUnicode'>
>>> deactivate() >>> deactivate()
>>> SafeString('a') + s
'aPassword'
>>> s + SafeString('a')
'Passworda'
>>> s + mark_safe('a')
'Passworda'
>>> mark_safe('a') + s
'aPassword'
>>> mark_safe('a') + mark_safe('s')
'as'
>>> print s
Password
""" """
__test__ = { __test__ = {