mirror of
				https://github.com/python/cpython.git
				synced 2025-11-03 03:22:27 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			373 lines
		
	
	
	
		
			12 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			373 lines
		
	
	
	
		
			12 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
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 <ctype.h> 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 <varargs.h> vs. <stdarg.h> 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
 |