]> granicus.if.org Git - python/commitdiff
test for int and long int overflow (allows operation on 64-bit platforms)
authorSkip Montanaro <skip@pobox.com>
Wed, 17 Oct 2001 22:53:33 +0000 (22:53 +0000)
committerSkip Montanaro <skip@pobox.com>
Wed, 17 Oct 2001 22:53:33 +0000 (22:53 +0000)
closes patch 470254

Lib/xmlrpclib.py

index fda68e7b8777c7cff5304e507c8ff4860dcd1fa4..f5955cf2acb5bc1820a8030f8daf2f5bfa9ad2f3 100644 (file)
@@ -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, "<", "&lt;")
     return replace(s, ">", "&gt;",)
 
+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("<value><int>%s</int></value>\n" % value)
     dispatch[IntType] = dump_int
 
     def dump_long(self, value):
-        val = int(value)
-        self.write("<value><int>%s</int></value>\n" % val)
+        # in case ints are > 32 bits
+        if value > MAXINT or value < MININT:
+            raise OverflowError, "long int exceeds XML-RPC limits"
+        self.write("<value><int>%s</int></value>\n" % int(value))
     dispatch[LongType] = dump_long
 
     def dump_double(self, value):