[Python-checkins] python/dist/src/Python import.c,2.175.2.2,2.175.2.3
nnorwitz@users.sourceforge.net
nnorwitz@users.sourceforge.net
Sat, 01 Jun 2002 11:27:36 -0700
Update of /cvsroot/python/python/dist/src/Python
In directory usw-pr-cvs1:/tmp/cvs-serv31405/Python
Modified Files:
Tag: release21-maint
import.c
Log Message:
Fix SF #561858 Assertion with very long lists
if co_stacksize was > 32767 (the maximum value
which can be stored in 16 bits (signed)),
the PyCodeObject would be written wrong.
So on the second import (reading the .pyc)
would cause a crash.
Since we can't change the PYC magic, we
go on (silently), but don't write the file.
This means everything will work, but
a .pyc will not be written and the file will need
to be parsed on each import.
Index: import.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Python/import.c,v
retrieving revision 2.175.2.2
retrieving revision 2.175.2.3
diff -C2 -d -r2.175.2.2 -r2.175.2.3
*** import.c 11 Jul 2001 12:03:44 -0000 2.175.2.2
--- import.c 1 Jun 2002 18:27:34 -0000 2.175.2.3
***************
*** 33,36 ****
--- 33,39 ----
#endif
+ /* check if the int_value can't be written in 15 bits (signed) */
+ #define CANT_WRITE(int_value) (int_value > 32767)
+
extern time_t PyOS_GetLastModificationTime(char *, FILE *);
/* In getmtime.c */
***************
*** 669,672 ****
--- 672,687 ----
{
FILE *fp;
+
+ if (CANT_WRITE(co->co_argcount) ||
+ CANT_WRITE(co->co_nlocals) ||
+ CANT_WRITE(co->co_stacksize) ||
+ CANT_WRITE(co->co_flags) ||
+ CANT_WRITE(co->co_firstlineno)) {
+ if (Py_VerboseFlag)
+ PySys_WriteStderr(
+ "# code too large: can't write %s\n",
+ cpathname);
+ return;
+ }
fp = open_exclusive(cpathname);