mirror of
https://github.com/python/cpython
synced 2026-09-29 12:10:30 +03:00
Implement an idea by Paul Rubin:
Change pickling format for bools to use a backwards compatible encoding. This means you can pickle True or False on Python 2.3 and Python 2.2 or before will read it back as 1 or 0. The code used for pickling bools before would create pickles that could not be read in previous Python versions.
This commit is contained in:
parent
d15a0a05d3
commit
e276339cea
3 changed files with 29 additions and 29 deletions
|
|
@ -77,8 +77,8 @@ LONG Long (unbounded) integer; repr(i), then newline.
|
|||
#define TUPLE 't'
|
||||
#define EMPTY_TUPLE ')'
|
||||
#define SETITEMS 'u'
|
||||
#define TRUE 'Z'
|
||||
#define FALSE 'z'
|
||||
#define TRUE "I01\n"
|
||||
#define FALSE "I00\n"
|
||||
|
||||
|
||||
static char MARKv = MARK;
|
||||
|
|
@ -936,10 +936,11 @@ save_none(Picklerobject *self, PyObject *args)
|
|||
static int
|
||||
save_bool(Picklerobject *self, PyObject *args)
|
||||
{
|
||||
static char buf[2] = {FALSE, TRUE};
|
||||
static char *buf[2] = {FALSE, TRUE};
|
||||
static char len[2] = {sizeof(FALSE)-1, sizeof(TRUE)-1};
|
||||
long l = PyInt_AS_LONG((PyIntObject *)args);
|
||||
|
||||
if ((*self->write_func)(self, buf + l, 1) < 0)
|
||||
if ((*self->write_func)(self, buf[l], len[l]) < 0)
|
||||
return -1;
|
||||
|
||||
return 0;
|
||||
|
|
@ -2655,7 +2656,12 @@ load_int(Unpicklerobject *self)
|
|||
}
|
||||
}
|
||||
else {
|
||||
if (!( py_int = PyInt_FromLong(l))) goto finally;
|
||||
if (len == 3 && (l == 0 || l == 1)) {
|
||||
if (!( py_int = PyBool_FromLong(l))) goto finally;
|
||||
}
|
||||
else {
|
||||
if (!( py_int = PyInt_FromLong(l))) goto finally;
|
||||
}
|
||||
}
|
||||
|
||||
free(s);
|
||||
|
|
@ -3763,16 +3769,6 @@ load(Unpicklerobject *self)
|
|||
break;
|
||||
continue;
|
||||
|
||||
case FALSE:
|
||||
if (load_false(self) < 0)
|
||||
break;
|
||||
continue;
|
||||
|
||||
case TRUE:
|
||||
if (load_true(self) < 0)
|
||||
break;
|
||||
continue;
|
||||
|
||||
case BININT:
|
||||
if (load_binint(self) < 0)
|
||||
break;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue