homepage

This issue tracker has been migrated to GitHub , and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

Author gyorkop
Recipients eric.araujo, gyorkop, loewis
Date 2010年10月13日.14:16:52
SpamBayes Score -1.0
Marked as misclassified Yes
Message-id <1286979415.28.0.505135655871.issue10066@psf.upfronthosting.co.za>
In-reply-to
Content
The shortest code which can trigger this error is the following:
>>> import xmlrpclib
>>> print xmlrpclib.dumps(('\x01',))
<params>
<param>
<value><string></string></value>
</param>
</params>
As you can see, the escape method does not care about non-printable characters which can cause parsing error in the other side.
My previous patch used \x to tell to the other side that the value contains some binary garbage. It you want to reject these binary bytes (which was not acceptable in my case), use this patch:
--- a/xmlrpclib.py	2010年10月13日 14:45:02.000000000 +0200
+++ b/xmlrpclib.py	2010年10月13日 16:03:14.000000000 +0200
@@ -165,6 +165,9 @@
 return data
 
 def escape(s, replace=string.replace):
+ if (None != re.search('[\x00-\x08\x0b-\x0c\x0e-\x1f\x7f-\xff]', s)):
+ raise Fault(INVALID_ENCODING_CHAR, 'Non-printable character in string')
+
 s = replace(s, "&", "&amp;")
 s = replace(s, "<", "&lt;")
 return replace(s, ">", "&gt;",)
An other idea: we may use CDATA (http://www.w3schools.com/xml/xml_cdata.asp) to transfer binary values...
History
Date User Action Args
2010年10月13日 14:16:55gyorkopsetrecipients: + gyorkop, loewis, eric.araujo
2010年10月13日 14:16:55gyorkopsetmessageid: <1286979415.28.0.505135655871.issue10066@psf.upfronthosting.co.za>
2010年10月13日 14:16:53gyorkoplinkissue10066 messages
2010年10月13日 14:16:52gyorkopcreate

AltStyle によって変換されたページ (->オリジナル) /