comparison tests/reproduce-crashes.el @ 4345:748bbb699b0a

Rename reproduce-bugs.el to reproduce-crashes.el.
author Stephen J. Turnbull <stephen@xemacs.org>
date Fri, 21 Dec 2007 03:33:35 -0800
parents tests/reproduce-bugs.el@2511b50f39c6
children ec1103d2c1c7
comparison
equal deleted inserted replaced
4344:2511b50f39c6 4345:748bbb699b0a
1 ;;; reproduce-bugs.el --- reproduce bugs in XEmacs
2
3 ;; Copyright (C) 1997 Free Software Foundation, Inc.
4 ;; Copyright (C) 1997 Sun Microsystems, Inc.
5
6 ;; Keywords: bugs, crash, burn, die, croak, munge
7
8 ;; This file is part of XEmacs.
9
10 ;; This file is free software; you can redistribute it and/or modify it
11 ;; under the terms of the GNU General Public License as published by
12 ;; the Free Software Foundation; either version 2, or (at your option)
13 ;; any later version.
14
15 ;; XEmacs is distributed in the hope that it will be useful, but
16 ;; WITHOUT ANY WARRANTY; without even the implied warranty of
17 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 ;; General Public License for more details.
19
20 ;; You should have received a copy of the GNU General Public License
21 ;; along with XEmacs; see the file COPYING. If not, write to the Free
22 ;; Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
23 ;; 02111-1307, USA.
24
25 ;;; Synched up with: Not in FSF.
26
27 ;;; Commentary:
28
29 ;; Reproduce XEmacs crashes, so that they can get fixed.
30 ;; A table of bugs is created. You can list, describe, or reproduce bugs.
31
32 ;; Non-crash bugs should not be in this file; they should be placed in
33 ;; an appropriate file in the tests/automated suite.
34 ;; You may need to use a debug version of XEmacs to reproduce some of these.
35
36 ;; For XEmacs maintainers and other masochists.
37 ;; It's a bad idea to rely on code in this file continuing to work in
38 ;; the same way. :-)
39
40 ;; #### This file should be cleaned up and renamed reproduce-crashes.el.
41 ;; #### Bugs < 11 need to be tested and versions where they pass recorded.
42 ;; #### Fixed bugs should become regression tests, maybe?
43 ;; #### Non-crashes should be copied (not moved) to tests/automatic.
44 ;; #### Do the autoloads make any sense?
45 ;; #### `list-bugs' should optionally sort on status.
46 ;; #### Bugs that depend on features (eg, Mule) should check for them and
47 ;; document them.
48
49 ;;; Code:
50
51 ;; UI entry points
52
53 (defun reproduce-bug (number)
54 "Reproduce XEmacs bugs, so that they can get fixed.
55 Especially, make XEmacs crash.
56 See reproduce-bugs.el for bug descriptions and bug numbers.
57 A debug version of XEmacs may be needed to reproduce some bugs."
58 (interactive "nBug Number: ")
59 (funcall (nth 0 (gethash number bug-hashtable))))
60
61 (defun describe-bug (number &optional show-code)
62 "Describe the bug with index NUMBER in a popup window.
63 If optional argument SHOW-CODE is non-nil, also display the reproduction code."
64 (interactive "nBug number: \ncShow code? [y/N] ")
65 (setq show-code (cond ((not (interactive-p)) show-code)
66 ((member show-code '(?y ?Y)) t)
67 (t nil)))
68 (with-displaying-temp-buffer (format "Bug %d" number)
69 (let ((bug (gethash number bug-hashtable)))
70 (princ (format "Bug #%d is %s.\n%s\n\n%s"
71 number
72 (nth 1 bug)
73 (nth 2 bug)
74 (if show-code (pp-to-string (nth 0 bug)) ""))))))
75
76 (defun list-bugs ()
77 "List bugs most recent first, each with brief description in a popup window.
78 Assumes a maximum of 999 bugs and a minimum of 80 column width window."
79 (interactive)
80 (with-displaying-temp-buffer "*Bug list*"
81 (princ " # status description\n")
82 (let (buglist)
83 (maphash (lambda (number bug)
84 (push (format "%3d %-9s %s"
85 number
86 (nth 1 bug)
87 (let ((description (nth 2 bug)))
88 (save-match-data
89 (string-match "\\(.*\\)\\(\n\\|$\\)"
90 description)
91 (match-string 1 description))))
92 buglist))
93 bug-hashtable)
94 (setq buglist (sort buglist (lambda (b1 b2) (string< b2 b1))))
95 (while buglist
96 (let ((bug (pop buglist)))
97 (princ (if (< (length bug) 79) bug (substring bug 0 78)))
98 (terpri))))))
99
100 ;; Database and utilities (internal)
101
102 (defvar bug-hashtable (make-hashtable 10)
103 "Table of bugs, keyed by bug index number.
104 The value is a list (LAMBDA STATUS DOCSTRING), where LAMBDA is a lambda
105 expression reproducing the bug, and STATUS and DOCSTRING describe the bug.
106 For details, see `defbug'.")
107
108 (put 'defbug 'lisp-indent-function 'defun)
109 (defmacro defbug (bug-number status docstring &rest body)
110 "Record a bug with key BUG-NUMBER and value (LAMBDA STATUS DOCSTRING).
111 LAMBDA is a lambda expression which when called executes BODY.
112 BUG-NUMBER is the bug's index number, a positive integer.
113 STATUS is the current status of the bug, one of
114 fixed The bug has been diagnosed and fixed.
115 diagnosed The bug has been localized but not fixed.
116 current The bug has been reported and reproduced but cause is unknown.
117 legacy The bug is undocumented but presumed fixed.
118 DOCSTRING should be a string describing the bug, including any relevant
119 descriptive information and references to archived mailing list traffic or
120 a BTS issue.
121 BODY is a sequence of expressions to execute to reproduce the bug."
122 (let ((body (if (stringp docstring) body (cons docstring body)))
123 (docstring (if (stringp docstring) docstring "[docstring omitted]")))
124 `(puthash ,bug-number
125 '((lambda () ,@body) ,status ,docstring)
126 bug-hashtable)))
127
128 (defconst bug-buffer
129 (save-excursion
130 (set-buffer (get-buffer-create "*Bug*"))
131 (erase-buffer)
132 (current-buffer)))
133
134
135 ;;; ------------------------------------------------------------------
136 ;;;; Bugs follow:
137
138 (defbug 11 fixed
139 "Crash in search due to backward movement.
140 Need Mule build with error checking in 21.5.28.
141 Fatal error: assertion failed,
142 file /Users/steve/Software/XEmacs/alioth/xemacs/src/search.c, line 1487,
143 (this_pos) > ((Bytebpos) 1) && this_pos <= ((buf)->text->z + 0)
144 Reported: <475B104F.2070807@barco.com>
145 <87hcixwkh4.fsf@uwakimon.sk.tsukuba.ac.jp>
146 Fixed: <87hcixwkh4.fsf@uwakimon.sk.tsukuba.ac.jp>"
147 (switch-to-buffer (get-buffer-create "*crash me*"))
148 ;; doozy is the keystroke equivalent of the keyboard macro
149 ;; "IAI" C-b C-b C-s C-x
150 (let ((doozy [;;(control ?x) ?b ?j ?u ?n ?k return
151 ?I ?A ?I
152 (control ?b) (control ?b)
153 (control ?s) (control ?w)]))
154 (execute-kbd-macro doozy)))
155
156
157 (defbug 10 current
158 "Crash on trace-function
159 Fatal error: assertion failed, file src/eval.c, line 1405, abort()"
160 (trace-function 'record-buffer bug-buffer)
161 (pop-to-buffer bug-buffer))
162
163
164 (defbug 9 current
165 "Crashes with stack overflow
166 Should give error via barf-if-buffer-read-only
167 Fatal error: assertion failed, file src/eval.c, line 1874, abort()
168 This bug has been fixed. -sb"
169 (switch-to-buffer bug-buffer)
170 ;; The following line should contain a number of eight-bit characters
171 (insert "²èÌÌËè¤Î°ÜÆ°¤Ï¤Ç¤­¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤·¤¿¡£º£Å٤ϡ¢²èÌ̤ÎÃæ¤Ç¡¢ÆÃÄê¤Î¾ì")
172 (setq buffer-read-only t)
173 (ignore-errors
174 (encode-coding-region (point-min) (point-max) 'euc-japan))
175 (garbage-collect))
176
177
178 (defbug 8 current
179 "Crashes in debug version only
180 Fatal error: assertion failed, file src/objects.h, line 149,
181 RECORD_TYPEP (_obj, lrecord_font_instance) || MARKED_RECORD_P (_obj)"
182 (let (glyph ext)
183 (make-face 'adobe-symbol-face)
184 (set-face-font
185 'adobe-symbol-face
186 "-adobe-symbol-medium-r-normal--*-140-*-*-p-*-adobe-fontspecific")
187 (setq glyph (make-glyph (list (vector 'string
188 :data (char-to-string ?\xD3)))))
189 (set-glyph-face glyph 'adobe-symbol-face)
190 (setq ext (make-extent 14 18))
191 (set-extent-property ext 'begin-glyph glyph)))
192
193
194 (defbug 7 current
195 "(maybe?) crash koi8
196 ACCL: Invalid command (c)
197 With debugging on, crashes as follows:
198 Fatal error: assertion failed, file src/lisp.h, line 1227, INTP (obj)"
199 ;;(load "cyrillic")
200 ;;(load "cyrillic-hooks")
201 (princ (decode-coding-string "\xe1" 'koi8)))
202
203
204 (defbug 6 current
205 "regexp crash
206 This doesn't crash for me. -sb"
207 (string-match "\\(\\s-\\|$\\)" "å"))
208
209
210 (defbug 5 legacy
211 "`subst-char-in-region' moves point."
212 (interactive)
213 (with-temp-buffer
214 (insert "abc")
215 (forward-char -1)
216 (subst-char-in-region 1 4 ?b ?\344)
217 (if (not (= (point) 3))
218 (message "Bug! point should equal 3 but is %d" (point)))))
219
220
221 (defbug 4 legacy
222 "Infinite recursion crash - Segmentation Fault"
223 (switch-to-buffer bug-buffer)
224 (insert "abcdefg")
225 (setq e (make-extent 1 4))
226 (set-extent-property e 'face 'bold)
227 (set-extent-property e 'duplicable t)
228 (set-extent-property e 'replicating t)
229 (insert (buffer-string))
230 (delete-region 8 9))
231
232
233 (defbug 3 current
234 "Completely Uninterruptible hang in re-search-backward (Was: java-mode)"
235 (switch-to-buffer bug-buffer)
236 (insert "{
237 public static void main(String[] args) throws java.io.IOException
238 {
239 }
240 }
241 ")
242 (goto-char (point-min))
243 (search-forward "{" nil nil 2)
244 (backward-char)
245 (re-search-backward
246 "^\\s(\\|\\(^[ \t]*\\(\\(\\(public\\|protected\\|static\\)\\s-+\\)*\\(\\(\\([[a-zA-Z][][_$.a-zA-Z0-9]*[][_$.a-zA-Z0-9]+\\|[[a-zA-Z]\\)\\s-*\\)\\s-+\\)\\)?\\(\\([[a-zA-Z][][_$.a-zA-Z0-9]*\\s-+\\)\\s-*\\)?\\([_a-zA-Z][^][ \t:;.,{}()=]*\\|\\([_$a-zA-Z][_$.a-zA-Z0-9]*\\)\\)\\s-*\\(([^);{}]*)\\)?\\([] \t]*\\)\\(\\s-*\\<throws\\>\\s-*\\(\\([_$a-zA-Z][_$.a-zA-Z0-9]*\\)[, \t\n\r\f]*\\)+\\)?\\s-*\\)\\s("))
247
248
249 (defbug 2 legacy
250 "crash popup frames
251 FIXED
252 #### This bug is not understood, and may be incomplete. See source."
253 (lambda ()
254 (let ((f (selected-frame)))
255 (make-frame `(popup ,(selected-frame)))
256 (make-frame)
257 (sit-for 0)
258 (delete-frame f)
259 ;; #### Check whether this is needed.
260 ;; (save-buffers-kill-emacs5)
261 )))
262
263
264 (defbug 1 legacy
265 "crash on delete-frame-hook
266 FIXED!
267 #### This bug is not understood, and seems to be incomplete. See source."
268 (lambda ()
269 ;; #### Should this be add-hook instead of setq?
270 (setq delete-frame-hook
271 (lambda (frame)
272 (select-frame frame)
273 (kill-buffer (window-buffer (frame-selected-window frame)))
274 ;; #### Do we need to delete a frame here or something?
275 ))))
276
277 ;;; reproduce-bugs.el ends here