From 6b449f4f2bd86c104a8b57547428eb9bb3a182b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20v=2E=20L=C3=B6wis?= Date: Mon, 3 Dec 2007 19:20:02 +0000 Subject: [PATCH] Issue #1727780: Support loading pickles of random.Random objects created on 32-bit systems on 64-bit systems, and vice versa. As a consequence of the change, Random pickles created by Python 2.6 cannot be loaded in Python 2.5. --- Doc/library/random.rst | 3 +++ Lib/random.py | 15 +++++++++++++-- Lib/test/randv2_32.pck | Bin 0 -> 7517 bytes Lib/test/randv2_64.pck | Bin 0 -> 7365 bytes Lib/test/randv3.pck | Bin 0 -> 8004 bytes Lib/test/test_random.py | 13 +++++++++++++ Misc/ACKS | 1 + Misc/NEWS | 5 +++++ Modules/_randommodule.c | 17 +++++++++-------- Tools/msi/msi.py | 1 + 10 files changed, 45 insertions(+), 10 deletions(-) create mode 100644 Lib/test/randv2_32.pck create mode 100644 Lib/test/randv2_64.pck create mode 100644 Lib/test/randv3.pck diff --git a/Doc/library/random.rst b/Doc/library/random.rst index 98054230635..07856d4c5b9 100644 --- a/Doc/library/random.rst +++ b/Doc/library/random.rst @@ -80,6 +80,9 @@ Bookkeeping functions: .. versionadded:: 2.1 + .. versionchanged:: 2.6 + State values produced in Python 2.6 cannot be loaded into earlier versions. + .. function:: setstate(state) diff --git a/Lib/random.py b/Lib/random.py index ed87ddd64ee..ec0f3868b69 100644 --- a/Lib/random.py +++ b/Lib/random.py @@ -83,7 +83,7 @@ class Random(_random.Random): """ - VERSION = 2 # used by getstate/setstate + VERSION = 3 # used by getstate/setstate def __init__(self, x=None): """Initialize an instance. @@ -120,9 +120,20 @@ def getstate(self): def setstate(self, state): """Restore internal state from object returned by getstate().""" version = state[0] - if version == 2: + if version == 3: version, internalstate, self.gauss_next = state super(Random, self).setstate(internalstate) + elif version == 2: + version, internalstate, self.gauss_next = state + # In version 2, the state was saved as signed ints, which causes + # inconsistencies between 32/64-bit systems. The state is + # really unsigned 32-bit ints, so we convert negative ints from + # version 2 to positive longs for version 3. + try: + internalstate = tuple( long(x) % (2**32) for x in internalstate ) + except ValueError, e: + raise TypeError, e + super(Random, self).setstate(internalstate) else: raise ValueError("state with version %s passed to " "Random.setstate() of version %s" % diff --git a/Lib/test/randv2_32.pck b/Lib/test/randv2_32.pck new file mode 100644 index 0000000000000000000000000000000000000000..587ab241091ec38bed3c392f618dd6bfe5cf0f47 GIT binary patch literal 7517 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 Q{?)(!`uo@Y_4mL04~AvOG5`Po literal 0 HcmV?d00001 diff --git a/Lib/test/randv2_64.pck b/Lib/test/randv2_64.pck new file mode 100644 index 0000000000000000000000000000000000000000..090dd6fd196828dd107b39a963e8529cd53785ab GIT binary patch literal 7365 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 literal 0 HcmV?d00001 diff --git a/Lib/test/randv3.pck b/Lib/test/randv3.pck new file mode 100644 index 0000000000000000000000000000000000000000..09fc38b1a87678a677f98daf7ba92b5dbce4489a GIT binary patch literal 8004 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 literal 0 HcmV?d00001 diff --git a/Lib/test/test_random.py b/Lib/test/test_random.py index 29fe42a030e..86e2e64b5d7 100644 --- a/Lib/test/test_random.py +++ b/Lib/test/test_random.py @@ -140,6 +140,19 @@ def test_pickling(self): restoredseq = [newgen.random() for i in xrange(10)] self.assertEqual(origseq, restoredseq) + def test_bug_1727780(self): + # verify that version-2-pickles can be loaded + # fine, whether they are created on 32-bit or 64-bit + # platforms, and that version-3-pickles load fine. + files = [("randv2_32.pck", 780), + ("randv2_64.pck", 866), + ("randv3.pck", 343)] + for file, value in files: + f = open(test_support.findfile(file),"rb") + r = pickle.load(f) + f.close() + self.assertEqual(r.randrange(1000), value) + class WichmannHill_TestBasicOps(TestBasicOps): gen = random.WichmannHill() diff --git a/Misc/ACKS b/Misc/ACKS index 337123a08ee..a3045f0c374 100644 --- a/Misc/ACKS +++ b/Misc/ACKS @@ -395,6 +395,7 @@ Marc-Andre Lemburg Mark Levinson William Lewis Robert van Liere +Shawn Ligocki Martin Ligr Christopher Lindblad Eric Lindvall diff --git a/Misc/NEWS b/Misc/NEWS index 99b105874f1..a1d1160fe55 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -308,6 +308,11 @@ Core and builtins Library ------- +- Issue #1727780: Support loading pickles of random.Random objects created + on 32-bit systems on 64-bit systems, and vice versa. As a consequence + of the change, Random pickles created by Python 2.6 cannot be loaded + in Python 2.5. + - Issue #1455: The distutils package now supports VS 2005 and VS 2008 for both the msvccompiler and cygwincompiler. diff --git a/Modules/_randommodule.c b/Modules/_randommodule.c index 25adc2e120b..e439f1e945c 100644 --- a/Modules/_randommodule.c +++ b/Modules/_randommodule.c @@ -319,12 +319,12 @@ random_getstate(RandomObject *self) if (state == NULL) return NULL; for (i=0; istate[i])); + element = PyLong_FromUnsignedLong(self->state[i]); if (element == NULL) goto Fail; PyTuple_SET_ITEM(state, i, element); } - element = PyInt_FromLong((long)(self->index)); + element = PyLong_FromLong((long)(self->index)); if (element == NULL) goto Fail; PyTuple_SET_ITEM(state, i, element); @@ -339,7 +339,8 @@ static PyObject * random_setstate(RandomObject *self, PyObject *state) { int i; - long element; + unsigned long element; + long index; if (!PyTuple_Check(state)) { PyErr_SetString(PyExc_TypeError, @@ -353,16 +354,16 @@ random_setstate(RandomObject *self, PyObject *state) } for (i=0; istate[i] = (unsigned long)element; + self->state[i] = element & 0xffffffffUL; /* Make sure we get sane state */ } - element = PyInt_AsLong(PyTuple_GET_ITEM(state, i)); - if (element == -1 && PyErr_Occurred()) + index = PyLong_AsLong(PyTuple_GET_ITEM(state, i)); + if (index == -1 && PyErr_Occurred()) return NULL; - self->index = (int)element; + self->index = (int)index; Py_INCREF(Py_None); return Py_None; diff --git a/Tools/msi/msi.py b/Tools/msi/msi.py index c9e3a883919..5e5cb0f7835 100644 --- a/Tools/msi/msi.py +++ b/Tools/msi/msi.py @@ -933,6 +933,7 @@ def add_files(db): lib.add_file("empty.vbs") lib.glob("*.uue") lib.glob("*.pem") + lib.glob("*.pck") lib.add_file("readme.txt", src="README") if dir=='decimaltestdata': lib.glob("*.decTest")