marshal: optimize parsing of empty Unicode strings
Don't create a temporary buffer of zeroy byte nor call r_string() if the length is zero, create directly the empty string.
This commit is contained in:
parent
79278bd8f6
commit
f1913ca37f
|
@ -979,20 +979,25 @@ r_object(RFILE *p)
|
|||
retval = NULL;
|
||||
break;
|
||||
}
|
||||
buffer = PyMem_NEW(char, n);
|
||||
if (buffer == NULL) {
|
||||
retval = PyErr_NoMemory();
|
||||
break;
|
||||
}
|
||||
if (r_string(buffer, n, p) != n) {
|
||||
if (n != 0) {
|
||||
buffer = PyMem_NEW(char, n);
|
||||
if (buffer == NULL) {
|
||||
retval = PyErr_NoMemory();
|
||||
break;
|
||||
}
|
||||
if (r_string(buffer, n, p) != n) {
|
||||
PyMem_DEL(buffer);
|
||||
PyErr_SetString(PyExc_EOFError,
|
||||
"EOF read where object expected");
|
||||
retval = NULL;
|
||||
break;
|
||||
}
|
||||
v = PyUnicode_DecodeUTF8(buffer, n, "surrogatepass");
|
||||
PyMem_DEL(buffer);
|
||||
PyErr_SetString(PyExc_EOFError,
|
||||
"EOF read where object expected");
|
||||
retval = NULL;
|
||||
break;
|
||||
}
|
||||
v = PyUnicode_DecodeUTF8(buffer, n, "surrogatepass");
|
||||
PyMem_DEL(buffer);
|
||||
else {
|
||||
v = PyUnicode_New(0, 0);
|
||||
}
|
||||
if (type == TYPE_INTERNED)
|
||||
PyUnicode_InternInPlace(&v);
|
||||
retval = v;
|
||||
|
|
Loading…
Reference in New Issue