summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Lib/test/test_marshal.py30
-rw-r--r--Misc/ACKS1
-rw-r--r--Misc/NEWS3
-rw-r--r--Python/marshal.c47
4 files changed, 8 insertions, 73 deletions
diff --git a/Lib/test/test_marshal.py b/Lib/test/test_marshal.py
index c817caf..7c52ee3 100644
--- a/Lib/test/test_marshal.py
+++ b/Lib/test/test_marshal.py
@@ -23,36 +23,12 @@ class HelperMixin:
class IntTestCase(unittest.TestCase, HelperMixin):
def test_ints(self):
- # Test the full range of Python ints.
- n = sys.maxsize
+ # Test a range of Python ints larger than the machine word size.
+ n = sys.maxsize ** 2
while n:
for expected in (-n, n):
self.helper(expected)
- n = n >> 1
-
- def test_int64(self):
- # Simulate int marshaling on a 64-bit box. This is most interesting if
- # we're running the test on a 32-bit box, of course.
-
- def to_little_endian_string(value, nbytes):
- b = bytearray()
- for i in range(nbytes):
- b.append(value & 0xff)
- value >>= 8
- return b
-
- maxint64 = (1 << 63) - 1
- minint64 = -maxint64-1
-
- for base in maxint64, minint64, -maxint64, -(minint64 >> 1):
- while base:
- s = b'I' + to_little_endian_string(base, 8)
- got = marshal.loads(s)
- self.assertEqual(base, got)
- if base == -1: # a fixed-point for shifting right 1
- base = 0
- else:
- base >>= 1
+ n = n >> 1
def test_bool(self):
for b in (True, False):
diff --git a/Misc/ACKS b/Misc/ACKS
index da250f4..ac8733f 100644
--- a/Misc/ACKS
+++ b/Misc/ACKS
@@ -1024,6 +1024,7 @@ Nicholas Riley
Jean-Claude Rimbault
Vlad Riscutia
Wes Rishel
+Daniel Riti
Juan M. Bello Rivas
Davide Rizzo
Anthony Roach
diff --git a/Misc/NEWS b/Misc/NEWS
index 1889ac2..b0a6595 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -44,6 +44,9 @@ Core and Builtins
Library
-------
+- Issue #15480: Remove the deprecated and unused TYPE_INT64 code from marshal.
+ Initial patch by Daniel Riti.
+
- Issue #2118: SMTPException is now a subclass of IOError.
- Issue #17016: Get rid of possible pointer wraparounds and integer overflows
diff --git a/Python/marshal.c b/Python/marshal.c
index bd88939..3e13851 100644
--- a/Python/marshal.c
+++ b/Python/marshal.c
@@ -33,10 +33,6 @@
#define TYPE_STOPITER 'S'
#define TYPE_ELLIPSIS '.'
#define TYPE_INT 'i'
-/* TYPE_INT64 is deprecated. It is not
- generated anymore, and support for reading it
- will be removed in Python 3.4. */
-#define TYPE_INT64 'I'
#define TYPE_FLOAT 'f'
#define TYPE_BINARY_FLOAT 'g'
#define TYPE_COMPLEX 'x'
@@ -638,42 +634,6 @@ r_long(RFILE *p)
return x;
}
-/* r_long64 deals with the TYPE_INT64 code. On a machine with
- sizeof(long) > 4, it returns a Python int object, else a Python long
- object. Note that w_long64 writes out TYPE_INT if 32 bits is enough,
- so there's no inefficiency here in returning a PyLong on 32-bit boxes
- for everything written via TYPE_INT64 (i.e., if an int is written via
- TYPE_INT64, it *needs* more than 32 bits).
-*/
-static PyObject *
-r_long64(RFILE *p)
-{
- PyObject *result = NULL;
- long lo4 = r_long(p);
- long hi4 = r_long(p);
-
- if (!PyErr_Occurred()) {
-#if SIZEOF_LONG > 4
- long x = (hi4 << 32) | (lo4 & 0xFFFFFFFFL);
- result = PyLong_FromLong(x);
-#else
- unsigned char buf[8];
- int one = 1;
- int is_little_endian = (int)*(char*)&one;
- if (is_little_endian) {
- memcpy(buf, &lo4, 4);
- memcpy(buf+4, &hi4, 4);
- }
- else {
- memcpy(buf, &hi4, 4);
- memcpy(buf+4, &lo4, 4);
- }
- result = _PyLong_FromByteArray(buf, 8, is_little_endian, 1);
-#endif
- }
- return result;
-}
-
static PyObject *
r_PyLong(RFILE *p)
{
@@ -871,11 +831,6 @@ r_object(RFILE *p)
R_REF(retval);
break;
- case TYPE_INT64:
- retval = r_long64(p);
- R_REF(retval);
- break;
-
case TYPE_LONG:
retval = r_PyLong(p);
R_REF(retval);
@@ -1201,7 +1156,7 @@ r_object(RFILE *p)
PyObject *name = NULL;
int firstlineno;
PyObject *lnotab = NULL;
-
+
idx = r_ref_reserve(flag, p);
if (idx < 0) {
retval = NULL;