From c4c3540201c6cd520d1915fbed8bbd307c6f0b16 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Krier?= Date: Sun, 19 Sep 2021 00:04:57 +0200 Subject: [PATCH] Use biginteger for integer overflowing XML-RPC integer dumper issue10732 review363891002 --- trytond/protocols/xmlrpc.py | 10 ++++++++++ trytond/tests/test_protocols.py | 4 ++++ 2 files changed, 14 insertions(+) diff --git a/trytond/protocols/xmlrpc.py b/trytond/protocols/xmlrpc.py index 70719bcb90..e4cbcafa16 100644 --- a/trytond/protocols/xmlrpc.py +++ b/trytond/protocols/xmlrpc.py @@ -55,10 +55,20 @@ def dump_timedelta(self, value, write): self.dump_struct(value, write) +def dump_long(self, value, write): + try: + self.dump_long(value, write) + except OverflowError: + write('') + write(str(int(value))) + write('\n') + + client.Marshaller.dispatch[Decimal] = dump_decimal client.Marshaller.dispatch[datetime.date] = dump_date client.Marshaller.dispatch[datetime.time] = dump_time client.Marshaller.dispatch[datetime.timedelta] = dump_timedelta +client.Marshaller.dispatch[int] = dump_long def dump_struct(self, value, write, escape=client.escape): diff --git a/trytond/tests/test_protocols.py b/trytond/tests/test_protocols.py index 44cfbd992f..c08e96d9a8 100644 --- a/trytond/tests/test_protocols.py +++ b/trytond/tests/test_protocols.py @@ -100,6 +100,10 @@ class XMLTestCase(unittest.TestCase): 'Test time' self.dumps_loads(datetime.datetime.now().time()) + def test_biginteger(self): + "Test BigInteger" + self.dumps_loads(client.MAXINT + 1) + def test_immutable_dict(self): "Test ImmutableDict" self.dumps_loads(ImmutableDict(foo='bar'))