summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
authorFred Drake <fdrake@acm.org>2005-02-11 17:59:08 (GMT)
committerFred Drake <fdrake@acm.org>2005-02-11 17:59:08 (GMT)
commit22c0706a584fc0de8648d24caa0520367c304235 (patch)
tree189b6217f2115a2432e4d37f0f33d0f30efd98d9 /Lib
parent438024258078d46e76c55cbf35d387725034be19 (diff)
downloadcpython-22c0706a584fc0de8648d24caa0520367c304235.zip
cpython-22c0706a584fc0de8648d24caa0520367c304235.tar.gz
cpython-22c0706a584fc0de8648d24caa0520367c304235.tar.bz2
fix decoding in _stringify to not depend on the default encoding
(closes SF bug #1115989)
Diffstat (limited to 'Lib')
-rw-r--r--Lib/test/test_xmlrpc.py42
-rw-r--r--Lib/xmlrpclib.py2
2 files changed, 43 insertions, 1 deletions
diff --git a/Lib/test/test_xmlrpc.py b/Lib/test/test_xmlrpc.py
index 8fa63de..b80de18 100644
--- a/Lib/test/test_xmlrpc.py
+++ b/Lib/test/test_xmlrpc.py
@@ -4,6 +4,13 @@ import unittest
import xmlrpclib
from test import test_support
+try:
+ unicode
+except NameError:
+ have_unicode = False
+else:
+ have_unicode = True
+
alist = [{'astring': 'foo@bar.baz.spam',
'afloat': 7283.43,
'anint': 2**20,
@@ -56,6 +63,41 @@ class XMLRPCTestCase(unittest.TestCase):
xmlrpclib.loads(strg)[0][0])
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():
test_support.run_unittest(XMLRPCTestCase)
diff --git a/Lib/xmlrpclib.py b/Lib/xmlrpclib.py
index 21cc3d0..13a7562 100644
--- a/Lib/xmlrpclib.py
+++ b/Lib/xmlrpclib.py
@@ -173,7 +173,7 @@ if unicode:
def _stringify(string):
# convert to 7-bit ascii if possible
try:
- return str(string)
+ return string.encode("ascii")
except UnicodeError:
return string
else: