summaryrefslogtreecommitdiffstats
path: root/BUGS
blob: 730fb944c4eec58ef256c675734549230dd932b2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
*** See the ChangeLog file for bugs fixed since 1.2 BETA 2 ***

Sorry, this list does not claim completeness.  If I fixed a bug
immediately upon receiving the first complaint I usually did not
nother to make an entry in this file, unless it was a serious bug
(core dump or infinite loop).

==> Status indicators: (-) not fixed; (*) fixed; (?) not sure.

======================================================================

Known BUGS in 1.2 BETA 1, fixed in 1.2 BETA 2
---------------------------------------------

(*) list slice assignment contains reantrancy bug

(*) range() and xrange() break on Alpha's

(*) interactive use of vars() gives barrage of output due to recursive
inclusion of '_'

(*) configure.in contains bogus name to check for inet library

Known BUGS in 1.1.1 and 1.2 BETA 3
----------------------------------

(-) still a memory leak in threads when thread.exit_thread() is used

Problems in 1.1.1 that are difficult to solve
---------------------------------------------

(-) 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
--------------------------

(-) tkinter doesn't seem to see any declaration of malloc on sunos
4.1.3?

(-) 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
--------------------------------------

(*) 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 aligns doubles wrongly 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)

(?) 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

(?) 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