cpython/Modules
Tim Peters f6b8045ca5 Reworked has_finalizer() to use the new _PyObject_Lookup() instead
of PyObject_HasAttr(); the former promises never to execute
arbitrary Python code.  Undid many of the changes recently made to
worm around the worst consequences of that PyObject_HasAttr() could
execute arbitrary Python code.

Compatibility is hard to discuss, because the dangerous cases are
so perverse, and much of this appears to rely on implementation
accidents.

To start with, using hasattr() to check for __del__ wasn't only
dangerous, in some cases it was wrong:  if an instance of an old-
style class didn't have "__del__" in its instance dict or in any
base class dict, but a getattr hook said __del__ existed, then
hasattr() said "yes, this object has a __del__".  But
instance_dealloc() ignores the possibility of getattr hooks when
looking for a __del__, so while object.__del__ succeeds, no
__del__ method is called when the object is deleted.  gc was
therefore incorrect in believing that the object had a finalizer.

The new method doesn't suffer that problem (like instance_dealloc(),
_PyObject_Lookup() doesn't believe __del__ exists in that case), but
does suffer a somewhat opposite-- and even more obscure --oddity:
if an instance of an old-style class doesn't have "__del__" in its
instance dict, and a base class does have "__del__" in its dict,
and the first base class with a "__del__" associates it with a
descriptor (an object with a __get__ method), *and* if that
descriptor raises an exception when __get__ is called, then
(a) the current method believes the instance does have a __del__,
but (b) hasattr() does not believe the instance has a __del__.

While these disagree, I believe the new method is "more correct":
because the descriptor *will* be called when the object is
destructed, it can execute arbitrary Python code at the time the
object is destructed, and that's really what gc means by "has a
finalizer":  not specifically a __del__ method, but more generally
the possibility of executing arbitrary Python code at object
destruction time.  Code in a descriptor's __get__() executed at
destruction time can be just as problematic as code in a
__del__() executed then.

So I believe the new method is better on all counts.

Bugfix candidate, but it's unclear to me how all this differs in
the 2.2 branch (e.g., new-style and old-style classes already
took different gc paths in 2.3 before this last round of patches,
but don't in the 2.2 branch).
2003-04-07 19:21:15 +00:00
..
expat Integrate the patch from expat.h 1.51; needed for some C compilers. 2003-02-07 02:15:56 +00:00
.cvsignore Add Setup.config 2000-06-30 16:09:01 +00:00
_bsddb.c init_bsddb(): Added a few symbols that Greg forgot. 2003-03-31 19:51:29 +00:00
_codecsmodule.c Fix for [ 543344 ] Interpreter crashes when recoding; suggested 2003-02-04 19:35:03 +00:00
_csv.c add comment about 2.2 compatibility 2003-03-23 14:32:54 +00:00
_curses_panel.c Excise DL_EXPORT/DL_IMPORT from Modules/*. Required adding a prototype 2002-08-02 02:27:13 +00:00
_cursesmodule.c Always call tparm with 10 arguments. It seems it's not varargs i 2002-11-21 14:17:51 +00:00
_hotshot.c Renamed PyObject_GenericGetIter to PyObject_SelfIter 2003-03-17 19:46:11 +00:00
_localemodule.c Always initialize Py_FileSystemDefaultEncoding on Unix in Py_Initialize, 2003-03-05 15:13:47 +00:00
_randommodule.c Patch #661760: Cygwin auto-import module patch 2003-01-06 12:41:26 +00:00
_sre.c fix for SF #635398 (don't "downcast" return strings from unicode to ascii) 2002-11-22 12:46:35 +00:00
_ssl.c Fix compiler warning 2003-02-02 17:08:33 +00:00
_testcapimodule.c Rename LONG_LONG to PY_LONG_LONG. Fixes #710285. 2003-03-29 10:06:18 +00:00
_tkinter.c Wrap thread stuff in WITH_THREAD. Fixes #704641. 2003-03-30 08:44:58 +00:00
_weakref.c Fix ref(), proxy() docstrings, based on comments from David Abrahams. 2002-08-02 20:23:40 +00:00
addrinfo.h Rename LONG_LONG to PY_LONG_LONG. Fixes #710285. 2003-03-29 10:06:18 +00:00
almodule.c SF patch #667548, Add some audio constants by Michael Pruett 2003-03-30 21:49:18 +00:00
ar_beos Moved BeOS/ar-fake and BeOS/linkmodule to Modules/ar_beos and 2001-02-16 03:24:50 +00:00
arraymodule.c Renamed PyObject_GenericGetIter to PyObject_SelfIter 2003-03-17 19:46:11 +00:00
audioop.c Excise DL_EXPORT/DL_IMPORT from Modules/*. Required adding a prototype 2002-08-02 02:27:13 +00:00
binascii.c binascii_a2b_base64: Properly return an empty string if the input was all 2003-03-17 11:24:29 +00:00
bsddbmodule.c Import PyBSDDB 3.4.0. Rename historical wrapper to bsddb185. 2002-11-19 08:09:52 +00:00
bz2module.c Rename LONG_LONG to PY_LONG_LONG. Fixes #710285. 2003-03-29 10:06:18 +00:00
ccpython.cc Patch and new file by Geoff Furnish for C++ compilation. 1999-12-16 17:52:08 +00:00
cdmodule.c Repair widespread misuse of _PyString_Resize. Since it's clear people 2002-04-27 18:44:32 +00:00
cgen.py Convert a pile of obvious "yes/no" functions to return bool. 2002-04-04 22:55:58 +00:00
cgensupport.c REMOVED all CWI, CNRI and BeOpen copyright markings. 2000-09-01 23:29:29 +00:00
cgensupport.h REMOVED all CWI, CNRI and BeOpen copyright markings. 2000-09-01 23:29:29 +00:00
clmodule.c Repair widespread misuse of _PyString_Resize. Since it's clear people 2002-04-27 18:44:32 +00:00
cmathmodule.c Excise DL_EXPORT/DL_IMPORT from Modules/*. Required adding a prototype 2002-08-02 02:27:13 +00:00
config.c.in Removed WITH_CYCLE_GC #ifdef-ery. Holes: 2002-07-07 03:59:34 +00:00
cPickle.c New private API functions _PyFloat_{Pack,Unpack}(4,8}. This is a 2003-03-20 20:53:32 +00:00
cryptmodule.c Excise DL_EXPORT/DL_IMPORT from Modules/*. Required adding a prototype 2002-08-02 02:27:13 +00:00
cStringIO.c SF patch 660559: Use METH_O and METH_NOARGS where possible 2003-01-03 08:24:58 +00:00
cstubs REMOVED all CWI, CNRI and BeOpen copyright markings. 2000-09-01 23:29:29 +00:00
datetimemodule.c timedelta comparison and datetime addition: as the Python implementation 2003-02-08 03:28:59 +00:00
dbmmodule.c Fix SF # 640557, '64-bit' systems and the dbm module 2002-11-22 23:29:31 +00:00
dlmodule.c Excise DL_EXPORT/DL_IMPORT from Modules/*. Required adding a prototype 2002-08-02 02:27:13 +00:00
errnomodule.c Excise DL_EXPORT/DL_IMPORT from Modules/*. Required adding a prototype 2002-08-02 02:27:13 +00:00
fcntlmodule.c Fix bug 2003-03-03 12:29:42 +00:00
flmodule.c Excise DL_EXPORT/DL_IMPORT from Modules/*. Required adding a prototype 2002-08-02 02:27:13 +00:00
fmmodule.c staticforward bites the dust. 2002-07-17 16:30:39 +00:00
fpectlmodule.c Patch for the DEC Alpha under Linux, by Lee Busby. 2002-09-26 16:52:02 +00:00
fpetestmodule.c Excise DL_EXPORT/DL_IMPORT from Modules/*. Required adding a prototype 2002-08-02 02:27:13 +00:00
gcmodule.c Reworked has_finalizer() to use the new _PyObject_Lookup() instead 2003-04-07 19:21:15 +00:00
gdbmmodule.c Excise DL_EXPORT/DL_IMPORT from Modules/*. Required adding a prototype 2002-08-02 02:27:13 +00:00
getaddrinfo.c Wipe out some warnings about non-ANSI code and an unsafe arg to 2002-07-17 14:33:34 +00:00
getbuildinfo.c Patch #696645: Remove VMS code with uncertain authorship. 2003-03-05 14:15:21 +00:00
getnameinfo.c Remove INET6 define. Use ENABLE_IPV6 instead. 2001-12-02 10:15:37 +00:00
getpath.c Make sure zip_path is null-terminated, since it's on the stack 2002-12-31 12:45:12 +00:00
glmodule.c SF patch #577031, remove PyArg_NoArgs() since it's deprecated 2002-07-28 15:23:23 +00:00
grpmodule.c Deal with a NULL gr_passwd. Reported by Anders Qvist. 2002-09-17 07:05:25 +00:00
imageop.c Excise DL_EXPORT/DL_IMPORT from Modules/*. Required adding a prototype 2002-08-02 02:27:13 +00:00
imgfile.c Convert METH_OLDARGS -> METH_VARARGS: also PyArg_Parse -> PyArg_ParseTuple 2002-03-31 15:43:28 +00:00
itertoolsmodule.c Renamed PyObject_GenericGetIter to PyObject_SelfIter 2003-03-17 19:46:11 +00:00
ld_so_aix Mod suggested by Donn Cave -- invoke makexp_aix relative to $0 1997-09-03 00:45:30 +00:00
ld_so_beos Remove a hard coded Python version, and a now incorrect relative path. Closes 2001-02-16 03:27:35 +00:00
linuxaudiodev.c Allow the device name to be passed to linuxaudiodev.open(), for 2002-11-27 22:19:15 +00:00
main.c Patch #672053: Return a result from Py_Main, instead of exiting. 2003-03-30 17:09:58 +00:00
makesetup [Patch #536769] Add -Xcompiler flag for adding arguments and switches for 2002-03-29 18:00:19 +00:00
makexp_aix remove C++ entries of the form Class::method 1998-04-09 21:46:02 +00:00
mathmodule.c SF patch #659536: Use PyArg_UnpackTuple where possible. 2002-12-29 16:33:45 +00:00
md5.h Issue an explicit error when we can't find an appropriate type for 2002-05-29 14:00:22 +00:00
md5c.c Patch #463421: speed up md5 module with real memcpy/set. 2001-09-24 17:14:40 +00:00
md5module.c SF #621948, update docstring for md5 by David M. Cooke. Will backport. 2002-10-11 21:53:01 +00:00
mmapmodule.c SF patch #682514, mmapmodule.c write fix for LP64 executables 2003-02-07 19:44:56 +00:00
mpzmodule.c Fix memory leaks reported by valgrind 2002-08-14 02:03:50 +00:00
nismodule.c SF #633013, Fix NIS causing interpreter core dump 2002-11-04 23:21:09 +00:00
operator.c SF patch #670423: Add missing identity tests to operator.c 2003-01-18 23:22:20 +00:00
ossaudiodev.c Use fcntl() to put the audio device *back* into blocking mode after 2003-04-04 01:47:42 +00:00
parsermodule.c Remove duplicate code introduced by fixing bug #678518 2003-02-10 01:08:50 +00:00
pcre-int.h AMK's revised version of the previous patch. 1998-05-07 15:32:44 +00:00
pcre.h Jack Jansen: Mac Carbon: don't include sys/types if we don't have it 2000-06-28 20:56:30 +00:00
pcremodule.c Excise DL_EXPORT/DL_IMPORT from Modules/*. Required adding a prototype 2002-08-02 02:27:13 +00:00
posixmodule.c Rename LONG_LONG to PY_LONG_LONG. Fixes #710285. 2003-03-29 10:06:18 +00:00
puremodule.c Patch #477750: Use METH_ constants in Modules. 2002-01-17 23:15:58 +00:00
pwdmodule.c Patch #614055: Support OpenVMS. 2002-12-06 12:48:53 +00:00
pyexpat.c Fix memory leak: free memory storing the content model passed to the 2003-02-02 03:54:17 +00:00
pypcre.c Undefine DPRINTF before defining it, there was a conflict with some other 2002-06-26 20:41:30 +00:00
python.c Apparently FreeBSD enables some HW floating-point exceptions by default. 2002-12-28 21:56:08 +00:00
readline.c get_completer() takes no args 2003-03-01 15:19:41 +00:00
regexmodule.c Excise DL_EXPORT/DL_IMPORT from Modules/*. Required adding a prototype 2002-08-02 02:27:13 +00:00
regexpr.c Replace abort with Py_FatalError. 2002-08-07 16:21:51 +00:00
regexpr.h Spelling fixes supplied by Rob W. W. Hooft. All these are fixes in either 2000-07-16 12:04:32 +00:00
resource.c Get build working with pre-C99 compilers 2003-03-30 20:51:29 +00:00
rgbimgmodule.c Excise DL_EXPORT/DL_IMPORT from Modules/*. Required adding a prototype 2002-08-02 02:27:13 +00:00
rotormodule.c Excise DL_EXPORT/DL_IMPORT from Modules/*. Required adding a prototype 2002-08-02 02:27:13 +00:00
selectmodule.c SF bug 684667: Modules/selectmodule.c returns NULL without exception set. 2003-02-11 17:18:58 +00:00
Setup.config.in Patch to make _codecs a builtin module. This is necessary since 2002-12-12 17:37:50 +00:00
Setup.dist Revert Patch #670715: iconv support. 2003-04-03 04:49:12 +00:00
sgimodule.c Convert more METH_OLDARGS & PyArg_Parse() 2002-04-02 18:26:33 +00:00
shamodule.c Use personal e-mail address 2002-10-30 21:08:34 +00:00
signalmodule.c Take out my (long since disabled) POSIX signal mask handling code. 2003-03-13 13:56:53 +00:00
socketmodule.c Rename LONG_LONG to PY_LONG_LONG. Fixes #710285. 2003-03-29 10:06:18 +00:00
socketmodule.h Major overhaul of timeout sockets: 2002-06-13 15:07:44 +00:00
sre.h Remove extraneous #define as per effbot's instructions in: 2002-03-18 18:46:14 +00:00
sre_constants.h added martin's BIGCHARSET patch to SRE 2.1.1. martin reports 2x 2001-07-02 16:58:38 +00:00
stropmodule.c Excise DL_EXPORT/DL_IMPORT from Modules/*. Required adding a prototype 2002-08-02 02:27:13 +00:00
structmodule.c Rename LONG_LONG to PY_LONG_LONG. Fixes #710285. 2003-03-29 10:06:18 +00:00
sunaudiodev.c staticforward bites the dust. 2002-07-17 16:30:39 +00:00
svmodule.c Patch #477750: Use METH_ constants in Modules. 2002-01-17 23:15:58 +00:00
symtablemodule.c Allow more docstrings to be removed during compilation in some modules 2002-08-13 22:20:41 +00:00
syslogmodule.c Excise DL_EXPORT/DL_IMPORT from Modules/*. Required adding a prototype 2002-08-02 02:27:13 +00:00
termios.c Excise DL_EXPORT/DL_IMPORT from Modules/*. Required adding a prototype 2002-08-02 02:27:13 +00:00
testcapi_long.h Fix error in comment, and in test_long_api and test_longlong_api remove 2001-06-16 08:10:13 +00:00
threadmodule.c --with(out)-thread is deprecated according to configure --help 2002-09-05 21:31:04 +00:00
timemodule.c - New function time.tzset() provides access to the C library tzet() 2003-03-14 21:51:36 +00:00
timing.h remove rcs history 1996-01-26 21:10:22 +00:00
timingmodule.c Excise DL_EXPORT/DL_IMPORT from Modules/*. Required adding a prototype 2002-08-02 02:27:13 +00:00
tkappinit.c Mods by Tony Lownds (patch 490100, slightly massaged by me) to make Tkinter 2001-12-09 23:15:56 +00:00
unicodedata.c Fix SF bug #694816, remove comparison of unsigned value < 0 2003-02-28 03:14:37 +00:00
unicodedata_db.h Add unidata_version. Bump generator version number. 2002-11-25 09:13:37 +00:00
unicodename_db.h Add unidata_version. Bump generator version number. 2002-11-25 09:13:37 +00:00
xreadlinesmodule.c Renamed PyObject_GenericGetIter to PyObject_SelfIter 2003-03-17 19:46:11 +00:00
xxmodule.c Another dummy type. 2003-02-13 18:44:57 +00:00
xxsubtype.c add some example docstrings using PyDoc_STR 2002-08-14 01:45:37 +00:00
yuv.h REMOVED all CWI, CNRI and BeOpen copyright markings. 2000-09-01 23:29:29 +00:00
yuvconvert.c REMOVED all CWI, CNRI and BeOpen copyright markings. 2000-09-01 23:29:29 +00:00
zipimport.c Make private function and data static. 2003-03-23 13:21:03 +00:00
zlibmodule.c - Thanks to Scott David Daniels, a subtle bug in how the zlib 2003-02-03 20:45:52 +00:00