Add tests for overflows converting ints to bytes

This commit is contained in:
Matt Wozniski 2019-05-09 03:19:29 -04:00
parent 9ce042ad07
commit e041df73bb
4 changed files with 106 additions and 0 deletions

View File

@ -0,0 +1,35 @@
import skip_if
skip_if.no_bigint()
try:
from array import array
except ImportError:
print("SKIP")
raise SystemExit
def test_array_overflow(typecode, val):
try:
print(array(typecode, [val]))
except OverflowError:
print('OverflowError')
# small int -1
test_array_overflow('Q', -1)
test_array_overflow('L', -1)
test_array_overflow('I', -1)
test_array_overflow('H', -1)
test_array_overflow('B', -1)
# big int -1
test_array_overflow('Q', -2**64 // 2**64)
test_array_overflow('L', -2**64 // 2**64)
test_array_overflow('I', -2**64 // 2**64)
test_array_overflow('H', -2**64 // 2**64)
test_array_overflow('B', -2**64 // 2**64)
# big int 2**63
test_array_overflow('q', 2**63)
test_array_overflow('l', 2**63)
test_array_overflow('i', 2**63)
test_array_overflow('h', 2**63)
test_array_overflow('b', 2**63)

View File

@ -17,3 +17,15 @@ try:
(1).to_bytes(-1, "little") (1).to_bytes(-1, "little")
except ValueError: except ValueError:
print("ValueError") print("ValueError")
# too small buffer should raise an error
try:
(256).to_bytes(1, "little")
except OverflowError:
print("OverflowError")
# negative numbers should raise an error
try:
(-256).to_bytes(2, "little")
except OverflowError:
print("OverflowError")

View File

@ -15,3 +15,15 @@ print(ib.to_bytes(20, "big"))
# check that extra zero bytes don't change the internal int value # check that extra zero bytes don't change the internal int value
print(int.from_bytes(b + bytes(10), "little") == int.from_bytes(b, "little")) print(int.from_bytes(b + bytes(10), "little") == int.from_bytes(b, "little"))
# too small buffer should raise an error
try:
(2**64).to_bytes(8, "little")
except OverflowError:
print("OverflowError")
# negative numbers should raise an error
try:
(-2**64).to_bytes(9, "little")
except OverflowError:
print("OverflowError")

View File

@ -0,0 +1,47 @@
import skip_if
skip_if.no_bigint()
try:
import ustruct as struct
except:
try:
import struct
except ImportError:
print("SKIP")
raise SystemExit
def test_struct_overflow(typecode, val):
try:
print(struct.pack(typecode, val))
except OverflowError:
print('OverflowError')
except struct.error:
print('OverflowError')
# small int -1
test_struct_overflow('>Q', -1)
test_struct_overflow('>L', -1)
test_struct_overflow('>I', -1)
test_struct_overflow('>H', -1)
test_struct_overflow('>B', -1)
# big int -1
test_struct_overflow('>Q', -2**64 // 2**64)
test_struct_overflow('>L', -2**64 // 2**64)
test_struct_overflow('>I', -2**64 // 2**64)
test_struct_overflow('>H', -2**64 // 2**64)
test_struct_overflow('>B', -2**64 // 2**64)
# possibly small ints
test_struct_overflow('>q', 2**63)
test_struct_overflow('>l', 2**31)
test_struct_overflow('>i', 2**31)
test_struct_overflow('>h', 2**15)
test_struct_overflow('>b', 2**7)
# definitely big ints
test_struct_overflow('>q', 2**64 // 2**1)
test_struct_overflow('>l', 2**64 // 2**33)
test_struct_overflow('>i', 2**64 // 2**33)
test_struct_overflow('>h', 2**64 // 2**49)
test_struct_overflow('>b', 2**64 // 2**57)