diff options
author | Antoine Pitrou <solipsis@pitrou.net> | 2010-04-21 22:56:22 (GMT) |
---|---|---|
committer | Antoine Pitrou <solipsis@pitrou.net> | 2010-04-21 22:56:22 (GMT) |
commit | 5bc7ec94760d7eae50da1751c3fd4bab01a34712 (patch) | |
tree | 7aba368ce0a39c937f3f63737d140d53964d755f /Python | |
parent | 5ae681081975ac074bd030d3f23e99e3644cfe10 (diff) | |
download | cpython-5bc7ec94760d7eae50da1751c3fd4bab01a34712.zip cpython-5bc7ec94760d7eae50da1751c3fd4bab01a34712.tar.gz cpython-5bc7ec94760d7eae50da1751c3fd4bab01a34712.tar.bz2 |
Merged revisions 80325 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r80325 | antoine.pitrou | 2010-04-22 00:53:29 +0200 (jeu., 22 avril 2010) | 6 lines
Issue #7332: Remove the 16KB stack-based buffer in
PyMarshal_ReadLastObjectFromFile, which doesn't bring any noticeable
benefit compared to the dynamic memory allocation fallback. Patch by
Charles-François Natali.
........
Diffstat (limited to 'Python')
-rw-r--r-- | Python/marshal.c | 20 |
1 files changed, 4 insertions, 16 deletions
diff --git a/Python/marshal.c b/Python/marshal.c index 3391085..90cd306 100644 --- a/Python/marshal.c +++ b/Python/marshal.c @@ -1078,23 +1078,13 @@ getfilesize(FILE *fp) PyObject * PyMarshal_ReadLastObjectFromFile(FILE *fp) { -/* 75% of 2.1's .pyc files can exploit SMALL_FILE_LIMIT. - * REASONABLE_FILE_LIMIT is by defn something big enough for Tkinter.pyc. - */ -#define SMALL_FILE_LIMIT (1L << 14) +/* REASONABLE_FILE_LIMIT is by defn something big enough for Tkinter.pyc. */ #define REASONABLE_FILE_LIMIT (1L << 18) #ifdef HAVE_FSTAT off_t filesize; -#endif -#ifdef HAVE_FSTAT filesize = getfilesize(fp); - if (filesize > 0) { - char buf[SMALL_FILE_LIMIT]; - char* pBuf = NULL; - if (filesize <= SMALL_FILE_LIMIT) - pBuf = buf; - else if (filesize <= REASONABLE_FILE_LIMIT) - pBuf = (char *)PyMem_MALLOC(filesize); + if (filesize > 0 && filesize <= REASONABLE_FILE_LIMIT) { + char* pBuf = (char *)PyMem_MALLOC(filesize); if (pBuf != NULL) { PyObject* v; size_t n; @@ -1102,8 +1092,7 @@ PyMarshal_ReadLastObjectFromFile(FILE *fp) is smaller than REASONABLE_FILE_LIMIT */ n = fread(pBuf, 1, (int)filesize, fp); v = PyMarshal_ReadObjectFromString(pBuf, n); - if (pBuf != buf) - PyMem_FREE(pBuf); + PyMem_FREE(pBuf); return v; } @@ -1114,7 +1103,6 @@ PyMarshal_ReadLastObjectFromFile(FILE *fp) */ return PyMarshal_ReadObjectFromFile(fp); -#undef SMALL_FILE_LIMIT #undef REASONABLE_FILE_LIMIT } |