Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 290fed4

Browse files
Issue #26873: xmlrpc now raises ResponseError on unsupported type tags
instead of silently return incorrect result.
1 parent a3fd0b2 commit 290fed4

3 files changed

Lines changed: 20 additions & 0 deletions

File tree

Lib/test/test_xmlrpc.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -224,6 +224,20 @@ def test_dump_bytes(self):
224224
self.assertIs(type(newvalue), xmlrpclib.Binary)
225225
self.assertIsNone(m)
226226

227+
def test_loads_unsupported(self):
228+
ResponseError = xmlrpclib.ResponseError
229+
data = '<params><param><value><spam/></value></param></params>'
230+
self.assertRaises(ResponseError, xmlrpclib.loads, data)
231+
data = ('<params><param><value><array>'
232+
'<value><spam/></value>'
233+
'</array></value></param></params>')
234+
self.assertRaises(ResponseError, xmlrpclib.loads, data)
235+
data = ('<params><param><value><struct>'
236+
'<member><name>a</name><value><spam/></value></member>'
237+
'<member><name>b</name><value><spam/></value></member>'
238+
'</struct></value></param></params>')
239+
self.assertRaises(ResponseError, xmlrpclib.loads, data)
240+
227241
def test_get_host_info(self):
228242
# see bug #3613, this raised a TypeError
229243
transp = xmlrpc.client.Transport()

Lib/xmlrpc/client.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -640,6 +640,7 @@ def __init__(self, use_datetime=False, use_builtin_types=False):
640640
self._stack = []
641641
self._marks = []
642642
self._data = []
643+
self._value = False
643644
self._methodname = None
644645
self._encoding = "utf-8"
645646
self.append = self._stack.append
@@ -669,6 +670,8 @@ def start(self, tag, attrs):
669670
if tag == "array" or tag == "struct":
670671
self._marks.append(len(self._stack))
671672
self._data = []
673+
if self._value and tag not in self.dispatch:
674+
raise ResponseError("unknown tag %r" % tag)
672675
self._value = (tag == "value")
673676

674677
def data(self, text):

Misc/NEWS

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,9 @@ Core and Builtins
107107
Library
108108
-------
109109

110+
- Issue #26873: xmlrpc now raises ResponseError on unsupported type tags
111+
instead of silently return incorrect result.
112+
110113
- Issue #26711: Fixed the comparison of plistlib.Data with other types.
111114

112115
- Issue #24114: Fix an uninitialized variable in `ctypes.util`.

0 commit comments

Comments
 (0)