Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 45cdcd9

Browse filesBrowse files
Issue #26873: xmlrpc now raises ResponseError on unsupported type tags
instead of silently return incorrect result.
2 parents c2f7d87 + 290fed4 commit 45cdcd9
Copy full SHA for 45cdcd9

3 files changed

+20Lines changed: 20 additions & 0 deletions

File tree

Expand file treeCollapse file tree
Open diff view settings
Filter options
Expand file treeCollapse file tree
Open diff view settings
Collapse file

‎Lib/test/test_xmlrpc.py‎

Copy file name to clipboardExpand all lines: Lib/test/test_xmlrpc.py
+14Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -223,6 +223,20 @@ def test_dump_bytes(self):
223223
self.assertIs(type(newvalue), xmlrpclib.Binary)
224224
self.assertIsNone(m)
225225

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

‎Lib/xmlrpc/client.py‎

Copy file name to clipboardExpand all lines: Lib/xmlrpc/client.py
+3Lines 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):
Collapse file

‎Misc/NEWS‎

Copy file name to clipboardExpand all lines: Misc/NEWS
+3Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -256,6 +256,9 @@ Core and Builtins
256256
Library
257257
-------
258258

259+
- Issue #26873: xmlrpc now raises ResponseError on unsupported type tags
260+
instead of silently return incorrect result.
261+
259262
- Issue #26711: Fixed the comparison of plistlib.Data with other types.
260263

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

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.