test for int and long int overflow (allows operation on 64-bit platforms)
closes patch 470254
This commit is contained in:
parent
07227d1ec0
commit
5449e08412
|
@ -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, "<", "<")
|
s = replace(s, "<", "<")
|
||||||
return replace(s, ">", ">",)
|
return replace(s, ">", ">",)
|
||||||
|
|
||||||
|
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):
|
||||||
|
|
Loading…
Reference in New Issue