From 5449e08412a5abd83c21d59764ef6240c58872b0 Mon Sep 17 00:00:00 2001 From: Skip Montanaro Date: Wed, 17 Oct 2001 22:53:33 +0000 Subject: test for int and long int overflow (allows operation on 64-bit platforms) closes patch 470254 --- Lib/xmlrpclib.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/Lib/xmlrpclib.py b/Lib/xmlrpclib.py index fda68e7..f5955cf 100644 --- a/Lib/xmlrpclib.py +++ b/Lib/xmlrpclib.py @@ -34,6 +34,7 @@ # 2001-10-01 fl Remove containers from memo cache when done with them # 2001-10-01 fl Use faster escape method (80% dumps speedup) # 2001-10-10 sm Allow long ints to be passed as ints if they don't overflow +# 2001-10-17 sm test for int and long overflow (allows use on 64-bit systems) # # Copyright (c) 1999-2001 by Secret Labs AB. # Copyright (c) 1999-2001 by Fredrik Lundh. @@ -144,6 +145,9 @@ def escape(s, replace=string.replace): s = replace(s, "<", "<") return replace(s, ">", ">",) +MAXINT = 2L**31-1 +MININT = -2L**31 + if unicode: def _stringify(string): # convert to 7-bit ascii if possible @@ -462,12 +466,17 @@ class Marshaller: f(self, value) def dump_int(self, value): + # in case ints are > 32 bits + if value > MAXINT or value < MININT: + raise OverflowError, "int exceeds XML-RPC limits" self.write("%s\n" % value) dispatch[IntType] = dump_int def dump_long(self, value): - val = int(value) - self.write("%s\n" % val) + # in case ints are > 32 bits + if value > MAXINT or value < MININT: + raise OverflowError, "long int exceeds XML-RPC limits" + self.write("%s\n" % int(value)) dispatch[LongType] = dump_long def dump_double(self, value): -- cgit v0.12