view tests/reproduce-crashes.el @ 4981:4aebb0131297

Cleanups/renaming of EXTERNAL_TO_C_STRING and friends -------------------- ChangeLog entries follow: -------------------- modules/ChangeLog addition: 2010-02-05 Ben Wing <ben@xemacs.org> * postgresql/postgresql.c: * postgresql/postgresql.c (CHECK_LIVE_CONNECTION): * postgresql/postgresql.c (Fpq_connectdb): * postgresql/postgresql.c (Fpq_connect_start): * postgresql/postgresql.c (Fpq_lo_import): * postgresql/postgresql.c (Fpq_lo_export): * ldap/eldap.c (Fldap_open): * ldap/eldap.c (Fldap_search_basic): * ldap/eldap.c (Fldap_add): * ldap/eldap.c (Fldap_modify): * ldap/eldap.c (Fldap_delete): * canna/canna_api.c (Fcanna_initialize): * canna/canna_api.c (Fcanna_store_yomi): * canna/canna_api.c (Fcanna_parse): * canna/canna_api.c (Fcanna_henkan_begin): EXTERNAL_TO_C_STRING returns its argument instead of storing it in a parameter, and is renamed to EXTERNAL_TO_ITEXT. Similar things happen to related macros. See entry in src/ChangeLog. More Mule-izing of postgresql.c. Extract out common code between `pq-connectdb' and `pq-connect-start'. Fix places that signal an error string using a formatted string to instead follow the standard and have a fixed reason followed by the particular error message stored as one of the frobs. src/ChangeLog addition: 2010-02-05 Ben Wing <ben@xemacs.org> * console-msw.c (write_string_to_mswindows_debugging_output): * console-msw.c (Fmswindows_message_box): * console-x.c (x_perhaps_init_unseen_key_defaults): * console.c: * database.c (dbm_get): * database.c (dbm_put): * database.c (dbm_remove): * database.c (berkdb_get): * database.c (berkdb_put): * database.c (berkdb_remove): * database.c (Fopen_database): * device-gtk.c (gtk_init_device): * device-msw.c (msprinter_init_device_internal): * device-msw.c (msprinter_default_printer): * device-msw.c (msprinter_init_device): * device-msw.c (sync_printer_with_devmode): * device-msw.c (Fmsprinter_select_settings): * device-x.c (sanity_check_geometry_resource): * device-x.c (Dynarr_add_validified_lisp_string): * device-x.c (x_init_device): * device-x.c (Fx_put_resource): * device-x.c (Fx_valid_keysym_name_p): * device-x.c (Fx_set_font_path): * dialog-msw.c (push_lisp_string_as_unicode): * dialog-msw.c (handle_directory_dialog_box): * dialog-msw.c (handle_file_dialog_box): * dialog-x.c (dbox_descriptor_to_widget_value): * editfns.c (Fformat_time_string): * editfns.c (Fencode_time): * editfns.c (Fset_time_zone_rule): * emacs.c (make_argc_argv): * emacs.c (Fdump_emacs): * emodules.c (emodules_load): * eval.c: * eval.c (maybe_signal_error_1): * event-msw.c (Fdde_alloc_advise_item): * event-msw.c (mswindows_dde_callback): * event-msw.c (mswindows_wnd_proc): * fileio.c (report_error_with_errno): * fileio.c (Fsysnetunam): * fileio.c (Fdo_auto_save): * font-mgr.c (extract_fcapi_string): * font-mgr.c (Ffc_config_app_font_add_file): * font-mgr.c (Ffc_config_app_font_add_dir): * font-mgr.c (Ffc_config_filename): * frame-gtk.c (gtk_set_frame_text_value): * frame-gtk.c (gtk_create_widgets): * frame-msw.c (mswindows_init_frame_1): * frame-msw.c (mswindows_set_title_from_ibyte): * frame-msw.c (msprinter_init_frame_3): * frame-x.c (x_set_frame_text_value): * frame-x.c (x_set_frame_properties): * frame-x.c (start_drag_internal_1): * frame-x.c (x_cde_transfer_callback): * frame-x.c (x_create_widgets): * glyphs-eimage.c (my_jpeg_output_message): * glyphs-eimage.c (jpeg_instantiate): * glyphs-eimage.c (gif_instantiate): * glyphs-eimage.c (png_instantiate): * glyphs-eimage.c (tiff_instantiate): * glyphs-gtk.c (xbm_instantiate_1): * glyphs-gtk.c (gtk_xbm_instantiate): * glyphs-gtk.c (gtk_xpm_instantiate): * glyphs-gtk.c (gtk_xface_instantiate): * glyphs-gtk.c (cursor_font_instantiate): * glyphs-gtk.c (gtk_redisplay_widget): * glyphs-gtk.c (gtk_widget_instantiate_1): * glyphs-gtk.c (gtk_add_tab_item): * glyphs-msw.c (mswindows_xpm_instantiate): * glyphs-msw.c (bmp_instantiate): * glyphs-msw.c (mswindows_resource_instantiate): * glyphs-msw.c (xbm_instantiate_1): * glyphs-msw.c (mswindows_xbm_instantiate): * glyphs-msw.c (mswindows_xface_instantiate): * glyphs-msw.c (mswindows_redisplay_widget): * glyphs-msw.c (mswindows_widget_instantiate): * glyphs-msw.c (add_tree_item): * glyphs-msw.c (add_tab_item): * glyphs-msw.c (mswindows_combo_box_instantiate): * glyphs-msw.c (mswindows_widget_query_string_geometry): * glyphs-x.c (x_locate_pixmap_file): * glyphs-x.c (xbm_instantiate_1): * glyphs-x.c (x_xbm_instantiate): * glyphs-x.c (extract_xpm_color_names): * glyphs-x.c (x_xpm_instantiate): * glyphs-x.c (x_xface_instantiate): * glyphs-x.c (autodetect_instantiate): * glyphs-x.c (safe_XLoadFont): * glyphs-x.c (cursor_font_instantiate): * glyphs-x.c (x_redisplay_widget): * glyphs-x.c (Fchange_subwindow_property): * glyphs-x.c (x_widget_instantiate): * glyphs-x.c (x_tab_control_redisplay): * glyphs.c (pixmap_to_lisp_data): * gui-x.c (menu_separator_style_and_to_external): * gui-x.c (add_accel_and_to_external): * gui-x.c (button_item_to_widget_value): * hpplay.c (player_error_internal): * hpplay.c (play_sound_file): * hpplay.c (play_sound_data): * intl.c (Fset_current_locale): * lisp.h: * menubar-gtk.c (gtk_xemacs_set_accel_keys): * menubar-msw.c (populate_menu_add_item): * menubar-msw.c (populate_or_checksum_helper): * menubar-x.c (menu_item_descriptor_to_widget_value_1): * nt.c (init_user_info): * nt.c (get_long_basename): * nt.c (nt_get_resource): * nt.c (init_mswindows_environment): * nt.c (get_cached_volume_information): * nt.c (mswindows_readdir): * nt.c (read_unc_volume): * nt.c (mswindows_stat): * nt.c (mswindows_getdcwd): * nt.c (mswindows_executable_type): * nt.c (Fmswindows_short_file_name): * ntplay.c (nt_play_sound_file): * objects-gtk.c: * objects-gtk.c (gtk_valid_color_name_p): * objects-gtk.c (gtk_initialize_font_instance): * objects-gtk.c (gtk_font_list): * objects-msw.c (font_enum_callback_2): * objects-msw.c (parse_font_spec): * objects-x.c (x_parse_nearest_color): * objects-x.c (x_valid_color_name_p): * objects-x.c (x_initialize_font_instance): * objects-x.c (x_font_instance_truename): * objects-x.c (x_font_list): * objects-xlike-inc.c (XFUN): * objects-xlike-inc.c (xft_find_charset_font): * process-nt.c (mswindows_report_winsock_error): * process-nt.c (nt_create_process): * process-nt.c (get_internet_address): * process-nt.c (nt_open_network_stream): * process-unix.c: * process-unix.c (allocate_pty): * process-unix.c (get_internet_address): * process-unix.c (unix_canonicalize_host_name): * process-unix.c (unix_open_network_stream): * realpath.c: * select-common.h (lisp_data_to_selection_data): * select-gtk.c (symbol_to_gtk_atom): * select-gtk.c (atom_to_symbol): * select-msw.c (symbol_to_ms_cf): * select-msw.c (mswindows_register_selection_data_type): * select-x.c (symbol_to_x_atom): * select-x.c (x_atom_to_symbol): * select-x.c (hack_motif_clipboard_selection): * select-x.c (Fx_store_cutbuffer_internal): * sound.c (Fplay_sound_file): * sound.c (Fplay_sound): * sound.h (sound_perror): * sysdep.c: * sysdep.c (qxe_allocating_getcwd): * sysdep.c (qxe_execve): * sysdep.c (copy_in_passwd): * sysdep.c (qxe_getpwnam): * sysdep.c (qxe_ctime): * sysdll.c (dll_open): * sysdll.c (dll_function): * sysdll.c (dll_variable): * sysdll.c (search_linked_libs): * sysdll.c (dll_error): * sysfile.h: * sysfile.h (PATHNAME_CONVERT_OUT_TSTR): * sysfile.h (PATHNAME_CONVERT_OUT_UTF_8): * sysfile.h (PATHNAME_CONVERT_OUT): * sysfile.h (LISP_PATHNAME_CONVERT_OUT): * syswindows.h (ITEXT_TO_TSTR): * syswindows.h (LOCAL_FILE_FORMAT_TO_TSTR): * syswindows.h (TSTR_TO_LOCAL_FILE_FORMAT): * syswindows.h (LOCAL_FILE_FORMAT_TO_INTERNAL_MSWIN): * syswindows.h (LISP_LOCAL_FILE_FORMAT_MAYBE_URL_TO_TSTR): * text.h: * text.h (eicpy_ext_len): * text.h (enum new_dfc_src_type): * text.h (EXTERNAL_TO_ITEXT): * text.h (GET_STRERROR): * tooltalk.c (check_status): * tooltalk.c (Fadd_tooltalk_message_arg): * tooltalk.c (Fadd_tooltalk_pattern_attribute): * tooltalk.c (Fadd_tooltalk_pattern_arg): * win32.c (tstr_to_local_file_format): * win32.c (mswindows_lisp_error_1): * win32.c (mswindows_report_process_error): * win32.c (Fmswindows_shell_execute): * win32.c (mswindows_read_link_1): Changes involving external/internal format conversion, mostly code cleanup and renaming. 1. Eliminate the previous macros like LISP_STRING_TO_EXTERNAL that stored its result in a parameter. The new version of LISP_STRING_TO_EXTERNAL returns its result through the return value, same as the previous NEW_LISP_STRING_TO_EXTERNAL. Use the new-style macros throughout the code. 2. Rename C_STRING_TO_EXTERNAL and friends to ITEXT_TO_EXTERNAL, in keeping with overall naming rationalization involving Itext and related types. Macros involved in previous two: EXTERNAL_TO_C_STRING -> EXTERNAL_TO_ITEXT EXTERNAL_TO_C_STRING_MALLOC -> EXTERNAL_TO_ITEXT_MALLOC SIZED_EXTERNAL_TO_C_STRING -> SIZED_EXTERNAL_TO_ITEXT SIZED_EXTERNAL_TO_C_STRING_MALLOC -> SIZED_EXTERNAL_TO_ITEXT_MALLOC C_STRING_TO_EXTERNAL -> ITEXT_TO_EXTERNAL C_STRING_TO_EXTERNAL_MALLOC -> ITEXT_TO_EXTERNAL_MALLOC LISP_STRING_TO_EXTERNAL LISP_STRING_TO_EXTERNAL_MALLOC LISP_STRING_TO_TSTR C_STRING_TO_TSTR -> ITEXT_TO_TSTR TSTR_TO_C_STRING -> TSTR_TO_ITEXT The following four still return their values through parameters, since they have more than one value to return: C_STRING_TO_SIZED_EXTERNAL -> ITEXT_TO_SIZED_EXTERNAL LISP_STRING_TO_SIZED_EXTERNAL C_STRING_TO_SIZED_EXTERNAL_MALLOC -> ITEXT_TO_SIZED_EXTERNAL_MALLOC LISP_STRING_TO_SIZED_EXTERNAL_MALLOC Sometimes additional casts had to be inserted, since the old macros played strange games and completely defeated the type system of the store params. 3. Rewrite many places where direct calls to TO_EXTERNAL_FORMAT occurred with calls to one of the convenience macros listed above, or to make_extstring(). 4. Eliminate SIZED_C_STRING macros (they were hardly used, anyway) and use a direct call to TO_EXTERNAL_FORMAT or TO_INTERNAL_FORMAT. 4. Use LISP_PATHNAME_CONVERT_OUT in many places instead of something like LISP_STRING_TO_EXTERNAL(..., Qfile_name). 5. Eliminate some temporary variables that are no longer necessary now that we return a value rather than storing it into a variable. 6. Some Mule-izing in database.c. 7. Error functions: -- A bit of code cleanup in maybe_signal_error_1. -- Eliminate report_file_type_error; it's just an alias for signal_error_2 with params in a different order. -- Fix some places in the hostname-handling code that directly inserted externally-retrieved error strings into the supposed ASCII "reason" param instead of doing the right thing and sticking text descriptive of what was going on in "reason" and putting the external message in a frob. 8. Use Ascbyte instead of CIbyte in process-unix.c and maybe one or two other places. 9. Some code cleanup in copy_in_passwd() in sysdep.c. 10. Fix a real bug due to accidental variable shadowing in tstr_to_local_file_format() in win32.c.
author Ben Wing <ben@xemacs.org>
date Fri, 05 Feb 2010 11:02:24 -0600
parents ae862598ee56
children 8b2f75cecb89
line wrap: on
line source

;;; reproduce-bugs.el --- reproduce bugs in XEmacs

;; Copyright (C) 1997  Free Software Foundation, Inc.
;; Copyright (C) 1997  Sun Microsystems, Inc.

;; Keywords: bugs, crash, burn, die, croak, munge

;; This file is part of XEmacs.

;; This file is free software; you can redistribute it and/or modify it
;; under the terms of the GNU General Public License as published by
;; the Free Software Foundation; either version 2, or (at your option)
;; any later version.

;; XEmacs is distributed in the hope that it will be useful, but
;; WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
;; General Public License for more details.

;; You should have received a copy of the GNU General Public License
;; along with XEmacs; see the file COPYING.  If not, write to the Free
;; Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
;; 02111-1307, USA.

;;; Synched up with: Not in FSF.

;;; Commentary:

;; Reproduce XEmacs crashes, so that they can get fixed.
;; A table of bugs is created.  You can list, describe, or reproduce bugs.

;; Non-crash bugs should not be in this file; they should be placed in
;; an appropriate file in the tests/automated suite.
;; You may need to use a debug version of XEmacs to reproduce some of these.

;; For XEmacs maintainers and other masochists.
;; It's a bad idea to rely on code in this file continuing to work in
;; the same way. :-)

;; #### Bugs < 11 need to be tested and versions where they pass recorded.
;; #### Fixed bugs should become regression tests, maybe?
;; #### Non-crashes should be copied (not moved) to tests/automatic.
;; #### `list-bugs' should optionally sort on status.
;; #### Bugs that depend on features (eg, Mule) should check for them and
;;      document them.

;;; Code:

;; UI entry points

(defun reproduce-bug (number)
  "Reproduce XEmacs bugs, so that they can get fixed.
Especially, make XEmacs crash.
See reproduce-bugs.el for bug descriptions and bug numbers.
A debug version of XEmacs may be needed to reproduce some bugs."
  (interactive "nBug Number: ")
  (funcall (nth 0 (gethash number bug-hashtable))))

(defun describe-bug (number &optional show-code)
  "Describe the bug with index NUMBER in a popup window.
If optional argument SHOW-CODE is non-nil, also display the reproduction code."
  (interactive "nBug number: \ncShow code? [y/N] ")
  (setq show-code (cond ((not (interactive-p)) show-code)
			((member show-code '(?y ?Y)) t)
			(t nil)))
  (with-displaying-temp-buffer (format "Bug %d" number)
    (let ((bug (gethash number bug-hashtable)))
      (princ (format "Bug #%d is %s.\n%s\n\n%s"
		     number
		     (nth 1 bug)
		     (nth 2 bug)
		     (if show-code (pp-to-string (nth 0 bug)) ""))))))

(defun list-bugs ()
  "List bugs most recent first, each with brief description in a popup window.
Assumes a maximum of 999 bugs and a minimum of 80 column width window."
  (interactive)
  (with-displaying-temp-buffer "*Bug list*"
    (princ " #    status                      description\n")
    (let (buglist)
      (maphash (lambda (number bug)
		 (push (format "%3d %-9s %s"
			       number
			       (nth 1 bug)
			       (let ((description (nth 2 bug)))
				 (save-match-data
				   (string-match "\\(.*\\)\\(\n\\|$\\)"
						 description)
				   (match-string 1 description))))
		       buglist))
	       bug-hashtable)
      (setq buglist (sort buglist (lambda (b1 b2) (string< b2 b1))))
      (while buglist
	(let ((bug (pop buglist)))
	  (princ (if (< (length bug) 79) bug (substring bug 0 78)))
	  (terpri))))))

;; Database and utilities (internal)

(defvar bug-hashtable (make-hashtable 10)
  "Table of bugs, keyed by bug index number.
The value is a list (LAMBDA STATUS DOCSTRING), where LAMBDA is a lambda
expression reproducing the bug, and STATUS and DOCSTRING describe the bug.
For details, see `defbug'.")

(put 'defbug 'lisp-indent-function 'defun)
(defmacro defbug (bug-number status docstring &rest body)
  "Record a bug with key BUG-NUMBER and value (LAMBDA STATUS DOCSTRING).
LAMBDA is a lambda expression which when called executes BODY.
BUG-NUMBER is the bug's index number, a positive integer.
STATUS is the current status of the bug, one of
  fixed         The bug has been diagnosed and fixed.
  diagnosed     The bug has been localized but not fixed.
  current       The bug has been reported and reproduced but cause is unknown.
  legacy        The bug is undocumented but presumed fixed.
DOCSTRING should be a string describing the bug, including any relevant
descriptive information and references to archived mailing list traffic or
a BTS issue.
BODY is a sequence of expressions to execute to reproduce the bug."
  (let ((body (if (stringp docstring) body (cons docstring body)))
	(docstring (if (stringp docstring) docstring "[docstring omitted]")))
    `(puthash ,bug-number
              '((lambda () ,@body) ,status ,docstring)
              bug-hashtable)))

(defconst bug-buffer
  (save-excursion
    (set-buffer (get-buffer-create "*Bug*"))
    (erase-buffer)
    (current-buffer)))


;;; ------------------------------------------------------------------
;;;; Bugs follow:

(defbug 13 current
  "Crash when reading a message in Gnus, in sys_re_search_2 in regex.c.
Reported by Adam Sjogren on xemacs-beta <87ocn5xt5a.fsf@topper.koldfront.dk>.
issue630 on the tracker.
Reproduced on Mac OS X 10.4.11 iBook G4 (PPC).
Reproduced on Gentoo Linux 2.6.30 AMD (Opteron)."
  (string-match (base64-decode-string "\
WyAJXSo804DFgPOApHWAtXuApliArID5gLZVgLSA2oChRUwvQ4DDQoCrgNeAwoDggLJ7gL6A
94CogOOAtlWAtIDagKFFgLCA6oC7gNqApFSAqICkgLZUgKmA9oC5gOqAsIDIgL6A3oCnQICh
RUwvQ4C2fYCqgKyAw0KAq4DXgKWA04C9gNCAoUWAxXeAqoDvgLF6gKiA04C5cYChR4CigK+A
ooC4gKKAtICigLctgKKAtICigLWAooC4LYCigK+AooCygKKAtIChRUwvQ4CrSIClgM6AqoCs
gMNCgKuA14DFgNyApoDbgKWA0YC5QoClgM6AuIDqgKqA94ChRYCrSIClgM6AqoCsgLZ9gKqA
rIDDQoCrgNeApYDTgL2A0IChRT4=")
		(base64-decode-string "\
XCKAqYDTgMWA84CkdYC1e4CmWICsgPmAtlWAtIDagKFFTC9DgMNCgKuA14DCgOCAsnuAvoD3
gKiA44C2VYC0gNqAoUWAsIDqgLuA2oCkVICogKSAtlSAqYD2gLmA6oCwgMiAvoDegKdAgKFF
TC9DgLZ9gKqArIDDQoCrgNeApYDTgL2A0IChRYDFd4CqgO+AsXqAqIDTgLlxgKFHgKKAr4Ci
gLiAooC0gKKAty2AooC0gKKAtYCigLgtgKKAr4CigLKAooC0gKFFTC9DgKtIgKWAzoCqgKyA
w0KAq4DXgMWA3ICmgNuApYDRgLlCgKWAzoC4gOqAqoD3gKFFgKtIgKWAzoCqgKyAtn2AqoCs
gMNCgKuA14ClgNOAvYDQgKFFXCIgPHRzZW5nLWNoaXVAdW1haWwu")))

(defbug 12 current
  "Crash when clicking on the menubar, triggered by a Lisp error due to a
version of truncate-string-to-width that does not take 5 parameters.
Fatal error: assertion failed, file menubar-x.c, line 579, ABORT()
Reported: https://bugzilla.redhat.com/show_bug.cgi?id=480845
          <1251569781.4318.2.camel@mslap>"
  (fset 'truncate-string-to-width
	#'(lambda (str end-column &optional start-column padding) str))
  (accelerate-menu))

(defbug 11 fixed
  "Crash in search due to backward movement.
Need Mule build with error checking in 21.5.28.
Fatal error: assertion failed,
file /Users/steve/Software/XEmacs/alioth/xemacs/src/search.c, line 1487,
(this_pos) > ((Bytebpos) 1) && this_pos <= ((buf)->text->z + 0)
Reported: <475B104F.2070807@barco.com>
          <87hcixwkh4.fsf@uwakimon.sk.tsukuba.ac.jp>
Fixed:    <87hcixwkh4.fsf@uwakimon.sk.tsukuba.ac.jp>"
  (switch-to-buffer (get-buffer-create "*crash me*"))
  ;; doozy is the keystroke equivalent of the keyboard macro
  ;; "IAI" C-b C-b C-s C-x
  (let ((doozy [;;(control ?x) ?b ?j ?u ?n ?k return
		?I ?A ?I
		   (control ?b) (control ?b)
		   (control ?s) (control ?w)]))
    (execute-kbd-macro doozy)))


(defbug 10 current
  "Crash on trace-function
Fatal error: assertion failed, file src/eval.c, line 1405, abort()"
  (trace-function 'record-buffer bug-buffer)
  (pop-to-buffer bug-buffer))


(defbug 9 current
  "Crashes with stack overflow
Should give error via barf-if-buffer-read-only
Fatal error: assertion failed, file src/eval.c, line 1874, abort()
This bug has been fixed. -sb"
  (switch-to-buffer bug-buffer)
  ;; The following line should contain a number of eight-bit characters
  (insert "²èÌÌËè¤Î°ÜÆ°¤Ï¤Ç¤­¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤·¤¿¡£º£Å٤ϡ¢²èÌ̤ÎÃæ¤Ç¡¢ÆÃÄê¤Î¾ì")
  (setq buffer-read-only t)
  (ignore-errors
    (encode-coding-region (point-min) (point-max) 'euc-japan))
  (garbage-collect))


(defbug 8 current
  "Crashes in debug version only
Fatal error: assertion failed, file src/objects.h, line 149,
RECORD_TYPEP (_obj, lrecord_font_instance) || MARKED_RECORD_P (_obj)"
  (let (glyph ext)
    (make-face 'adobe-symbol-face)
    (set-face-font
     'adobe-symbol-face
     "-adobe-symbol-medium-r-normal--*-140-*-*-p-*-adobe-fontspecific")
    (setq glyph (make-glyph (list (vector 'string
					  :data (char-to-string ?\xD3)))))
    (set-glyph-face glyph 'adobe-symbol-face)
    (setq ext (make-extent 14 18))
    (set-extent-property ext 'begin-glyph glyph)))


(defbug 7 current
  "(maybe?) crash koi8
ACCL: Invalid command (c)
With debugging on, crashes as follows:
Fatal error: assertion failed, file src/lisp.h, line 1227, INTP (obj)"
  ;;(load "cyrillic")
  ;;(load "cyrillic-hooks")
  (princ (decode-coding-string "\xe1" 'koi8)))


(defbug 6 current
  "regexp crash
This doesn't crash for me. -sb"
  (string-match "\\(\\s-\\|$\\)" "å"))


(defbug 5 legacy
  "`subst-char-in-region' moves point."
  (interactive)
  (with-temp-buffer
    (insert "abc")
    (forward-char -1)
    (subst-char-in-region 1 4 ?b ?\344)
    (if (not (= (point) 3))
	(message "Bug!  point should equal 3 but is %d" (point)))))


(defbug 4 legacy
  "Infinite recursion crash - Segmentation Fault"
  (switch-to-buffer bug-buffer)
  (insert "abcdefg")
  (setq e (make-extent 1 4))
  (set-extent-property e 'face 'bold)
  (set-extent-property e 'duplicable t)
  (set-extent-property e 'replicating t)
  (insert (buffer-string))
  (delete-region 8 9))


(defbug 3 current
  "Completely Uninterruptible hang in re-search-backward (Was: java-mode)"
  (switch-to-buffer bug-buffer)
  (insert "{
public static void main(String[] args) throws java.io.IOException
    {
    }
}
")
  (goto-char (point-min))
  (search-forward "{" nil nil 2)
  (backward-char)
  (re-search-backward
   "^\\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("))


(defbug 2 legacy
  "crash popup frames
FIXED
#### This bug is not understood, and may be incomplete.  See source."
  (lambda ()
    (let ((f (selected-frame)))
      (make-frame `(popup ,(selected-frame)))
      (make-frame)
      (sit-for 0)
      (delete-frame f)
      ;; #### Check whether this is needed.
      ;; (save-buffers-kill-emacs5)
      )))


(defbug 1 legacy
  "crash on delete-frame-hook
FIXED!
#### This bug is not understood, and seems to be incomplete.  See source."
  (lambda ()
    ;; #### Should this be add-hook instead of setq?
    (setq delete-frame-hook
	  (lambda (frame)
	    (select-frame frame)
	    (kill-buffer (window-buffer (frame-selected-window frame)))
	    ;; #### Do we need to delete a frame here or something?
	    ))))

;;; reproduce-bugs.el ends here