THIS LIST DOES NOT CLAIM COMPLETENESS. ==> Status indicators: (-) not fixed; (*) fixed; (?) not sure. ====================================================================== Problems that are difficult to solve ------------------------------------ (-) "f()=0" generates syntax error msg without line number (-) tkinter seems to leave an exception around sometime which breaks unmarshalling code objects [hard to reproduce, have added a trap to marshal.c to catch it] (-) destroying all modules may destroy __builtin__ (or other modules) while destructors of other modules may still need it [hard to fix -- could maintain a list of all modules in order of importation so we can destroy them in reverse order??? really hopeless -- would have to destroy objects in a module in reverse order too...] (-) doneimport() should be called *before* the Py_AtExit code is called [problem: what if other threads are still active?] Known portability problems -------------------------- (-) arraymodule doesn't compile under Ultrix (FPROTO macro) (-) makesetup assumes CCC is the C++ compiler -- not portable (-) "make depend" assumes mkdep exists -- not portable (-) regen calls h2py which isn't defined by default (-) HP doesn't compile out of the box (needs LIBS=-ldld or LIBS=/usr/lib/libdld.sl) [hard to test without a HP machine handy] ====================================================================== BUGS present in 1.1.1 and fixed in 1.2 -------------------------------------- (*) extraneous fclose() in run_script() in pythonrun.c for .pyc file (*) __str__ is called if it exists (and then fails) when applying str() to a class (*) mem leaks in inittime() in timemodule.c (*) mem leak in optimize() in compile.c (*) mem leak in func_dealloc() in funcobject.c (*) missing DECREF for result of run_string in exec_statement() in ceval.c (*) missing INCREF in RAISE_EXCEPTION case after gettupleitem() in ceval.c (*) posix.utime gives problems on problems on platforms where struct utime members are bitfields (*) leak in regex module.c:reg_dealloc() -- should free compiled pattern (*) many uses of macros from fail with signed characters (*) compilation on NeXT requires manual editing of the Makefile (*) tkinter should cast malloc() result (*) marshal.c (w_object()) triggers GCC bug on DEC Alpha (*) int/long size bug in range() and xrange() on DEC Alpha (*) memory leaks in dbm and gdbm modules (*) refcnt bug in select.select([f], [f], [f]) (*) Should fflush(stdout) before printing traceback to stderr (*) Linux uses GNU getopt by default which is broken (*) make sharedinstall references to machdep directory but doesn't create it (*) a file with unmatched triple quotes causes a loop in the scanner (*) [X]DECREF can cause the interpreter to be called recursively (for __del__ disciplines) -- so list and dict implementation calls doing DECREF can cause recursive calls to methods of the object being modified. Other files too. (*) if __getattr__ or __repr__ prints something, calling repr(x) from cmd line forgets a newline (*) C-level coerce() doesn't call __coerce__ when it should (and similar for __cmp__) (*) struct module assigns unaligned doubles when compiled with -DDEBUG on sparc (*) memory leak (namebuf) in initmodule2 (*) hash() of float values returns bogus values (*) pow(int, int, long) does wrong series of DECREF() calls. (*) flushline() may clear the exception condition so shouldn't be called before print_error() (*) Everything else that uses err_get() should use err_fetch() (*) sockets aren't thread safe (address of static struct returned, some calls aren't thread safe) (*) threadmodule.c leaks LOTS of memory at thread exit (*) shared install in Modules still doesn't work for empty list (*) threadmodule.c leaks 'res' in t_bootstrap (*) errors.c shouldn't declare strerror() on NT (*) DECREF can cause the interpreter to be called recursively (for __del__ disciplines) -- so list and dict implementation calls doing DECREF can cause recursive calls to methods of the object being modified. Other files too. (Only partially fixed.) (*) tkinter dereferences NULL if timer callback raises an exception (*) must link with -lieee for linux (*) if a timer handler routine raises an exception, the interpreter dereferences NULL (*) __getattr__ doesn't clear error (*) '%s' % a, where a is a class instance, fails (*) "make test" won't find freshly built dynamically loaded modules -- should add ./Modules to TESTPATH (*) lshift calls __rshift__ instead of __rlshift__ (*) memory leak in creation of sys.builtin_module_names (*) Bugs in instance_dealloc(): (a) memory leak for exception type+value; (2) should save+restore traceback as well (*) modsupport.c(vmkvalue): on systems where va_list is an array, the calls to do_mkvalue and do_mktuple don't want an "&" before va. ====================================================================== BUGS found in 1.1 and fixed in 1.1.1 ------------------------------------ (*) printing name of lambda in traceback dereferences NULL (*) A built-in function using getargs() and expecting >= 1 argument may dump core when called without arguments (*) newgetargs() dumps core in compat mode when NULL is passed in but max is >0 (*) pow() should be declared varargs since it uses newgetargs (*) newmodule.c doesn't compile on SunOS 4.1.3 due to non-K&R backslashes (*) some typos in tut.tex (*) test for broken static forward is not strong enough (*) Doc/Makefile assumes . is in $PATH in call to whichlibs (*) math module misses hypot() function (*) structmember.h should include stddef.h (for offsetof macro) (*) gdbmmodule.c frees the wrong structures (*) makesetup script misses some dollars and backslashes (*) getargs.obj missing from NT makefile (*) sorting class instances broken if no __cmp__ defined ====================================================================== BUGS found in 1.0.3 and fixed in 1.1 ------------------------------------ (*) 2 specific leaks: 1 PYTHONPATH; 2 reading code from .pyc (*) If class C doesn't define __cmp__, cmp(a,b) will return -2 and [a,b].sort() will fail (*) Syntax errors are reported in a silly way if multi-line tokens are involved. (*) SyntaxError exception for compile('...') are reported wrongly (lineno is always zero and offset is offset into the whole string). (*) freeze script needs major rewrite to cope with multiple extensions (Jack seems to have fixed it now -- where is it?) (*) unwanted entries in stack trace if err_clear() clears an error that also set a stack trace (*) i, x[i] = a, b assigns b to x[a] rather than to x[i] as expected (documented with a warning in ref6.tex!) (*) etags no longer supports -t flag (*) compile.c:com_argdefs() references unalloc'ed memory for def f(a=1,): ... (*) If you have a python binary in your path like /ufs/guido/bin/sgi/python then the default prefix option computed by the configure script is bogus! (*) Make rule for making lib*.a should remove the lib*.a file first. (*) vars() error message is wrong (copied from dir() obviously). (*) socket.gethostname() is undocumented. (*) rfc822.py: getfirst* dies when multiple headers occur (*) urllib caching is wrong (should use date from Expires header) (*) On a related matter: regexpr.c still has two malloc()s the results of which are not tested for being NULL (lines 1253 and 1530). There are also some in rgbimagemodule.c. Am I overlooking something or is this a crasher? (*) strop.rindex('abc', '') returns 0 instead of 3 (*) sunaudiodevmodule.o is too long! (*) toplevel README needs new text on PC and Mac builds (*) long(0x80000000) has wrong value! ====================================================================== Bugs found in 1.0.2 and not yet fixed ------------------------------------- (?) compiler warnings about argument type of uname() on ULTRIX machines (don't know what to do about it) [could be fixed by fix for bitfields in struct uname] (?) syntax error for interactive input prints garbage instead of last source line on some systems (e.g. AIX) (impossible to test/reproduce) [I think I've found this one -- a missing INCREF in print_error] (?) (maybe) a bad .pyc file (with old magic number) causes the .py file to be ignored [should be fixed by rewrite of import.c] (?) Sunos4.0.2 / 386 configure bugs: - timelocal instead of mktime - unistd.h doesn't declare some functions (don't know what to do about this) Bugs found in 1.0.2 and fixed in 1.0.3 -------------------------------------- (*) nasty bug in string formatting (see test_types.py, search for %) (*) if a triple-quoted string ends in a quote followed by a newline (followed immediately by the terminating 3 quotes) then a syntax error or system error ensues (*) bug in socket.listen: clipping backlog to >= 1 doesn't work (*) two bogus XDEL's in Modules/regexmodule.reg_dealloc() (*) Parser/myreadline.my_fgets: #endif EINTR misplaced (*) new IP address for ftp.cwi.nl !!! (*) typing vars() to interactive prompt runs into infinite loop because of '_' (*) tokenizer/tok_nextc() runs into infinite loop when file does not end in linefeed (*) Sunos4.0.2 / 386 configure bugs: (*) - use size_t at some places without including sys/types.h (*) - missing clock_t (*) - uses SEEK_SET in some places that don't include unistd.h ====================================================================== Bugs found in 1.0.1 and not yet fixed ------------------------------------- (?) threads are slow on Solaris 2 (so what?) (*) threads cause myreadline.c's readline() to think it sees an EOF. (I *think* I've fixed this, by testing for EINTR) (?) min() on PC version generates wrong result (i.e. same as max()) [this happens on SoftPC -- don't know about other systems] (can't find the reason -- may be SoftPC bug) (*) flp.py cache bug: if the cache only contains one form, asking for all forms returns only the cached form Bugs found in 1.0.1 and fixed in 1.0.2 -------------------------------------- (*) core dump when parser.parsefile() called (*) man page contains a mess before -d option (*) threads don't work on IRIX 4 (*) wrong cast of svideo_getattr in svmodule.c (*) bad return value in runpython.c's run_tty_1() (*) creating dict of 100,000 objects gets MemoryError or dumps core (*) freeze script doesn't work ====================================================================== BUGS found in 1.0.0 and not yet fixed ------------------------------------- (*) On NeXT, need to define _POSIX_SOURCE. (?) there appears to be something wrong with gcc and -ldl on some SunOS 4.1.3 systems (?) jredfords reports core dump with float literals BUGS found in 1.0.0 and fixed in 1.0.1 -------------------------------------- (*) On SGI IRIX 4 using cc, compilation errors in md5module.c. (*) In cdmodule.c, getattr initialized with (destructor)! (*) Lib/tzparse.py runs test() on import (*) Lib/filewin.py belongs in Lib/stdwin (*) lib and man install targets don't use $(srcdir) (*) Modules/rgbimgmodule.c: exception name contains comma instead of dot (*) The FAQ still references misc/EXTENDING and misc/DYNLOAD etc (*) The FAQ still describes how to work around a problem in 0.9.9 exec() (*) Lib/aifc.py, returns float rate, should be int (*) Lib/sunau.py, incorrectly cumputes byte count from frame rate (*) README should mention possibility of passing OPT=-g to make (*) dynamic loading on sunos 4.1.3 must call dlopen(..., 1) (*) use of vs. should depend on HAVE_STDARG_PROTOTYPES, not on HAVE_STDARG_H (*) Doc/README refers to Misc/FTP which in fact does not exist any more (*) filter(None, 'abcdefg') dumps core (*) once you interrupt time.sleep(), there is no interrupt handler! ====================================================================== end of file