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
