mirror of
https://github.com/python/cpython.git
synced 2025-10-13 10:23:28 +00:00
fix decoding in _stringify to not depend on the default encoding
(closes SF bug #1115989)
This commit is contained in:
parent
4380242580
commit
22c0706a58
2 changed files with 43 additions and 1 deletions
|
@ -4,6 +4,13 @@ import unittest
|
||||||
import xmlrpclib
|
import xmlrpclib
|
||||||
from test import test_support
|
from test import test_support
|
||||||
|
|
||||||
|
try:
|
||||||
|
unicode
|
||||||
|
except NameError:
|
||||||
|
have_unicode = False
|
||||||
|
else:
|
||||||
|
have_unicode = True
|
||||||
|
|
||||||
alist = [{'astring': 'foo@bar.baz.spam',
|
alist = [{'astring': 'foo@bar.baz.spam',
|
||||||
'afloat': 7283.43,
|
'afloat': 7283.43,
|
||||||
'anint': 2**20,
|
'anint': 2**20,
|
||||||
|
@ -56,6 +63,41 @@ class XMLRPCTestCase(unittest.TestCase):
|
||||||
xmlrpclib.loads(strg)[0][0])
|
xmlrpclib.loads(strg)[0][0])
|
||||||
self.assertRaises(TypeError, xmlrpclib.dumps, (arg1,))
|
self.assertRaises(TypeError, xmlrpclib.dumps, (arg1,))
|
||||||
|
|
||||||
|
def test_default_encoding_issues(self):
|
||||||
|
# SF bug #1115989: wrong decoding in '_stringify'
|
||||||
|
utf8 = """<?xml version='1.0' encoding='iso-8859-1'?>
|
||||||
|
<params>
|
||||||
|
<param><value>
|
||||||
|
<string>abc \x95</string>
|
||||||
|
</value></param>
|
||||||
|
<param><value>
|
||||||
|
<struct>
|
||||||
|
<member>
|
||||||
|
<name>def \x96</name>
|
||||||
|
<value><string>ghi \x97</string></value>
|
||||||
|
</member>
|
||||||
|
</struct>
|
||||||
|
</value></param>
|
||||||
|
</params>
|
||||||
|
"""
|
||||||
|
old_encoding = sys.getdefaultencoding()
|
||||||
|
reload(sys) # ugh!
|
||||||
|
sys.setdefaultencoding("iso-8859-1")
|
||||||
|
try:
|
||||||
|
(s, d), m = xmlrpclib.loads(utf8)
|
||||||
|
finally:
|
||||||
|
sys.setdefaultencoding(old_encoding)
|
||||||
|
items = d.items()
|
||||||
|
if have_unicode:
|
||||||
|
self.assertEquals(s, u"abc \x95")
|
||||||
|
self.assert_(isinstance(s, unicode))
|
||||||
|
self.assertEquals(items, [(u"def \x96", u"ghi \x97")])
|
||||||
|
self.assert_(isinstance(items[0][0], unicode))
|
||||||
|
self.assert_(isinstance(items[0][1], unicode))
|
||||||
|
else:
|
||||||
|
self.assertEquals(s, "abc \xc2\x95")
|
||||||
|
self.assertEquals(items, [("def \xc2\x96", "ghi \xc2\x97")])
|
||||||
|
|
||||||
def test_main():
|
def test_main():
|
||||||
test_support.run_unittest(XMLRPCTestCase)
|
test_support.run_unittest(XMLRPCTestCase)
|
||||||
|
|
||||||
|
|
|
@ -173,7 +173,7 @@ if unicode:
|
||||||
def _stringify(string):
|
def _stringify(string):
|
||||||
# convert to 7-bit ascii if possible
|
# convert to 7-bit ascii if possible
|
||||||
try:
|
try:
|
||||||
return str(string)
|
return string.encode("ascii")
|
||||||
except UnicodeError:
|
except UnicodeError:
|
||||||
return string
|
return string
|
||||||
else:
|
else:
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue