Fix test_pickle, by reverting the string opcodes (S, T, U) to returning
strings, in Latin-1. Bytes are once more pickled through bytes.__reduce__, but now it returns "latin-1" as the second parameter. Unfortunately this breaks datetime pickling. I'll have to investigate further; reverting Martin's changes doesn't seem to help.
This commit is contained in:
parent
00058aa28c
commit
f93254d299
|
@ -506,20 +506,6 @@ class Pickler:
|
|||
self.memoize(obj)
|
||||
dispatch[str8] = save_string
|
||||
|
||||
def save_bytes(self, obj):
|
||||
# Like save_string
|
||||
if self.bin:
|
||||
n = len(obj)
|
||||
if n < 256:
|
||||
self.write(SHORT_BINSTRING + bytes([n]) + bytes(obj))
|
||||
else:
|
||||
self.write(BINSTRING + pack("<i", n) + bytes(obj))
|
||||
else:
|
||||
# Strip leading 'b'
|
||||
self.write(STRING + bytes(repr(obj).lstrip("b")) + b'\n')
|
||||
self.memoize(obj)
|
||||
dispatch[bytes] = save_bytes
|
||||
|
||||
def save_unicode(self, obj, pack=struct.pack):
|
||||
if self.bin:
|
||||
encoded = obj.encode('utf-8')
|
||||
|
@ -945,12 +931,12 @@ class Unpickler:
|
|||
break
|
||||
else:
|
||||
raise ValueError, "insecure string pickle"
|
||||
self.append(bytes(codecs.escape_decode(rep)[0]))
|
||||
self.append(str(codecs.escape_decode(rep)[0], "latin-1"))
|
||||
dispatch[STRING[0]] = load_string
|
||||
|
||||
def load_binstring(self):
|
||||
len = mloads(b'i' + self.read(4))
|
||||
self.append(self.read(len))
|
||||
self.append(str(self.read(len), "latin-1"))
|
||||
dispatch[BINSTRING[0]] = load_binstring
|
||||
|
||||
def load_unicode(self):
|
||||
|
@ -964,7 +950,7 @@ class Unpickler:
|
|||
|
||||
def load_short_binstring(self):
|
||||
len = ord(self.read(1))
|
||||
self.append(self.read(len))
|
||||
self.append(str(self.read(len), "latin-1"))
|
||||
dispatch[SHORT_BINSTRING[0]] = load_short_binstring
|
||||
|
||||
def load_tuple(self):
|
||||
|
|
|
@ -2724,13 +2724,11 @@ PyDoc_STRVAR(reduce_doc, "Return state information for pickling.");
|
|||
static PyObject *
|
||||
bytes_reduce(PyBytesObject *self)
|
||||
{
|
||||
/* XXX: This currently returns a Py_UNICODE-widened string
|
||||
in the tuple which is completely useless. Pickle stopped
|
||||
using it for that reason. */
|
||||
return Py_BuildValue("(O(s#))",
|
||||
return Py_BuildValue("(O(s#s))",
|
||||
self->ob_type,
|
||||
self->ob_bytes == NULL ? "" : self->ob_bytes,
|
||||
self->ob_size);
|
||||
self->ob_size,
|
||||
"latin-1");
|
||||
}
|
||||
|
||||
static PySequenceMethods bytes_as_sequence = {
|
||||
|
|
Loading…
Reference in New Issue