summaryrefslogtreecommitdiffstats
path: root/Python
diff options
context:
space:
mode:
authorAntoine Pitrou <solipsis@pitrou.net>2010-04-21 22:56:22 (GMT)
committerAntoine Pitrou <solipsis@pitrou.net>2010-04-21 22:56:22 (GMT)
commit5bc7ec94760d7eae50da1751c3fd4bab01a34712 (patch)
tree7aba368ce0a39c937f3f63737d140d53964d755f /Python
parent5ae681081975ac074bd030d3f23e99e3644cfe10 (diff)
downloadcpython-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.c20
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
}