[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Fwd: Crash when buffer is edited while save-buffer asks for coding syste
From: |
Glenn Morris |
Subject: |
Fwd: Crash when buffer is edited while save-buffer asks for coding system |
Date: |
Wed, 09 Jan 2008 19:45:15 -0500 |
User-agent: |
Gnus (www.gnus.org), GNU Emacs (www.gnu.org/software/emacs/) |
Does anyone have any ideas about this? It causes a reproducible crash
(see very nice recipe below) with the current EMACS_22_BASE on
Gnu/Linux, so it would be good to fix.
It happens because when Fwrite_region calls
Vselect_safe_coding_system_function, it opens a window for the user to
modify the buffer mid-save. The abort in buf_charpos_to_bytepos in
marker.c due to changed buffer size is what causes the actual crash.
One easy solution is to for Fwrite_region to make the buffer read-only
while Vselect_safe_coding_system_function is called. That will protect
against accidental editing of the buffer at least, but of course a
determined user could still make the buffer writable again.
Ideally, I think one would want errors during write-region to abort
the write, not Emacs.
--- Begin Message ---
Subject:
Crash when buffer is edited while save-buffer asks for coding system
Date:
Tue, 25 Dec 2007 01:34:00 +0100
User-agent:
Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.8.1.6) Gecko/20070728 Thunderbird/2.0.0.6 Mnenhy/0.7.5.0
Please describe exactly what actions triggered the bug
and the precise symptoms of the bug:
Manual way:
- emacs -Q
- Create a new text file
- C-x RET f windows-1252 RET
- insert "Hi"
- M-x ucs-insert RET 2122 RET (inserts a trademark symbol)
- C-x C-s
- C-x RET f latin-1 RET C-x C-s
- Emacs will ask for a coding system, since latin-1 does not contain the
trademark symbol.
- C-x C-o until point is in your file with the trademark
- C-a C-d to delete the first character
- C-x C-o until point is back at minibuffer
- RET
- "Would you like to attach a debugger?" I guess you will select Yes
here :)
Automatic way:
(progn
(with-current-buffer (find-file-noselect (make-temp-file
"charsetbug"))
(set-buffer-file-coding-system 'windows-1252)
(insert "Hi")
(ucs-insert 8482) ;; trademark sign
(save-buffer 0)
(setq buf (current-buffer))
(pop-to-buffer buf))
(set-buffer buf)
(set-buffer-file-coding-system 'latin-1)
(defun abcd () (interactive)
(let ((wnd (selected-window)))
(select-window (get-buffer-window buf))
(goto-char (point-min))
(delete-char 1)
(select-window wnd)
(execute-kbd-macro "\r")))
(global-set-key "\C-cq" 'abcd)
(execute-kbd-macro "\C-x\C-s\C-cq"))
Merry Christmas! :)
In GNU Emacs 22.1.1 (i386-mingw-nt5.1.2600)
of 2007-06-02 on RELEASE
Windowing system distributor `Microsoft Corp.', version 5.1.2600
configured using `configure --with-gcc (3.4) --cflags -Ic:/gnuwin32/include'
Important settings:
value of $LC_ALL: nil
value of $LC_COLLATE: nil
value of $LC_CTYPE: nil
value of $LC_MESSAGES: nil
value of $LC_MONETARY: nil
value of $LC_NUMERIC: nil
value of $LC_TIME: nil
value of $LANG: DEU
locale-coding-system: cp1252
default-enable-multibyte-characters: t
Major mode: Lisp Interaction
Minor modes in effect:
encoded-kbd-mode: t
tooltip-mode: t
tool-bar-mode: t
mouse-wheel-mode: t
menu-bar-mode: t
file-name-shadow-mode: t
global-font-lock-mode: t
font-lock-mode: t
blink-cursor-mode: t
unify-8859-on-encoding-mode: t
utf-translate-cjk-mode: t
auto-compression-mode: t
line-number-mode: t
Recent input:
M-x r e p o r t - e m a c s - b u g <return>
Recent messages:
("D:\\Progs\\emacs\\bin\\emacs.exe" "-q")
Loading encoded-kb...done
For information about the GNU Project and its goals, type C-h C-p. [2 times]
Loading emacsbug...
Loading regexp-opt...done
Loading emacsbug...done
--- End Message ---
- Fwd: Crash when buffer is edited while save-buffer asks for coding system,
Glenn Morris <=