Commit 45cdcd93 authored by Serhiy Storchaka's avatar Serhiy Storchaka

Issue #26873: xmlrpc now raises ResponseError on unsupported type tags

instead of silently return incorrect result.
parents c2f7d878 290fed43
...@@ -223,6 +223,20 @@ class XMLRPCTestCase(unittest.TestCase): ...@@ -223,6 +223,20 @@ class XMLRPCTestCase(unittest.TestCase):
self.assertIs(type(newvalue), xmlrpclib.Binary) self.assertIs(type(newvalue), xmlrpclib.Binary)
self.assertIsNone(m) self.assertIsNone(m)
def test_loads_unsupported(self):
ResponseError = xmlrpclib.ResponseError
data = '<params><param><value><spam/></value></param></params>'
self.assertRaises(ResponseError, xmlrpclib.loads, data)
data = ('<params><param><value><array>'
'<value><spam/></value>'
'</array></value></param></params>')
self.assertRaises(ResponseError, xmlrpclib.loads, data)
data = ('<params><param><value><struct>'
'<member><name>a</name><value><spam/></value></member>'
'<member><name>b</name><value><spam/></value></member>'
'</struct></value></param></params>')
self.assertRaises(ResponseError, xmlrpclib.loads, data)
def test_get_host_info(self): def test_get_host_info(self):
# see bug #3613, this raised a TypeError # see bug #3613, this raised a TypeError
transp = xmlrpc.client.Transport() transp = xmlrpc.client.Transport()
......
...@@ -640,6 +640,7 @@ class Unmarshaller: ...@@ -640,6 +640,7 @@ class Unmarshaller:
self._stack = [] self._stack = []
self._marks = [] self._marks = []
self._data = [] self._data = []
self._value = False
self._methodname = None self._methodname = None
self._encoding = "utf-8" self._encoding = "utf-8"
self.append = self._stack.append self.append = self._stack.append
...@@ -669,6 +670,8 @@ class Unmarshaller: ...@@ -669,6 +670,8 @@ class Unmarshaller:
if tag == "array" or tag == "struct": if tag == "array" or tag == "struct":
self._marks.append(len(self._stack)) self._marks.append(len(self._stack))
self._data = [] self._data = []
if self._value and tag not in self.dispatch:
raise ResponseError("unknown tag %r" % tag)
self._value = (tag == "value") self._value = (tag == "value")
def data(self, text): def data(self, text):
......
...@@ -256,6 +256,9 @@ Core and Builtins ...@@ -256,6 +256,9 @@ Core and Builtins
Library Library
------- -------
- Issue #26873: xmlrpc now raises ResponseError on unsupported type tags
instead of silently return incorrect result.
- Issue #26711: Fixed the comparison of plistlib.Data with other types. - Issue #26711: Fixed the comparison of plistlib.Data with other types.
- Issue #24114: Fix an uninitialized variable in `ctypes.util`. - Issue #24114: Fix an uninitialized variable in `ctypes.util`.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment