From: Victor Stinner Date: Fri, 21 Jun 2013 17:08:06 +0000 (+0200) Subject: marshal: optimize parsing of empty Unicode strings X-Git-Tag: v3.4.0a1~432 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=f1913ca37f65190cc6f48d9a9404453a131c124a;p=python 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. --- diff --git a/Python/marshal.c b/Python/marshal.c index 3e13851704..e519fc9bfa 100644 --- a/Python/marshal.c +++ b/Python/marshal.c @@ -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;