test for int and long int overflow (allows operation on 64-bit platforms)

closes patch 470254
This commit is contained in:
Skip Montanaro 2001-10-17 22:53:33 +00:00
parent 07227d1ec0
commit 5449e08412
1 changed files with 11 additions and 2 deletions

View File

@ -34,6 +34,7 @@
# 2001-10-01 fl Remove containers from memo cache when done with them # 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-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-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 Secret Labs AB.
# Copyright (c) 1999-2001 by Fredrik Lundh. # Copyright (c) 1999-2001 by Fredrik Lundh.
@ -144,6 +145,9 @@ def escape(s, replace=string.replace):
s = replace(s, "<", "&lt;") s = replace(s, "<", "&lt;")
return replace(s, ">", "&gt;",) return replace(s, ">", "&gt;",)
MAXINT = 2L**31-1
MININT = -2L**31
if unicode: if unicode:
def _stringify(string): def _stringify(string):
# convert to 7-bit ascii if possible # convert to 7-bit ascii if possible
@ -462,12 +466,17 @@ class Marshaller:
f(self, value) f(self, value)
def dump_int(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) self.write("<value><int>%s</int></value>\n" % value)
dispatch[IntType] = dump_int dispatch[IntType] = dump_int
def dump_long(self, value): def dump_long(self, value):
val = int(value) # in case ints are > 32 bits
self.write("<value><int>%s</int></value>\n" % val) 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 dispatch[LongType] = dump_long
def dump_double(self, value): def dump_double(self, value):