[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Maybe bug with multibyte string and aset
From: |
pluskid |
Subject: |
Maybe bug with multibyte string and aset |
Date: |
Wed, 11 Oct 2006 12:30:57 +0800 (CST) |
Please write in English if possible, because the Emacs maintainers
usually do not have translators to read other languages for them.
Your bug report will be posted to the address@hidden mailing list.
Please describe exactly what actions triggered the bug
and the precise symptoms of the bug:
Recent days, my Mew(Message in Emacs World) keeps on crashing with
"Args out of range" and I have had many mails disappeared. Today I
traced into and find it's the function `aset' that throw this error.
It seems to be a bug dealing with multibyte characters, i.e. Chinese
characters. Here I'll show how to reproduce it. In case you don't have
font to display Chinese character, I will use `!!' to denote the
Chinese character `我' , C-u C-x = on this character will produce the
following properties, maybe of some help.
character: 我 (25105, #o61021, #x6211)
preferred charset: chinese-gb2312 (GB2312 Chinese simplified: ISO-IR-58)
code point: 0x4E52
syntax: w which means: word
category: C:Chinese (Han) characters of 2-byte character sets
c:Chinese h:Korean j:Japanese
|:While filling, we can break a line at this character.
buffer code: #xE6 #x88 #x91
file code: ESC #x24 #x28 #x41 #x4E #x52 (encoded by coding system
ctext-unix)
display: by this font (glyph code)
-misc-simsun-medium-r-normal--14-101-100-100-p-140-gb2312.1980-0 (#x4E52)
Then, try the following code
(let ((foo "foobar"))
(aset foo 0 ?\!!)) ; note the `!!' means the Chinese character I
; mentioned above
evaluate this expression , I get an error:
Debugger entered--Lisp error: (args-out-of-range "foobar" 25105)
aset("foobar" 0 25105)
(let ((foo "foobar")) (aset foo 0 25105))
eval((let ((foo "foobar")) (aset foo 0 25105)))
eval-last-sexp-1(nil)
eval-last-sexp(nil)
call-interactively(eval-last-sexp)
I've tried this on Emacs 22 cvs and it works. I think any multibyte
character will cause this problem(I've tested many of them, but I
can't test all). Still, if the string foo initially contains some
multibyte characters, the error won't occur. The following code:
(let ((foo "foo!!ar"))
(aset foo 0 ?\!!)
foo)
works perfectly. And if I explicitly decode the string to a Chinese
coding system, it also works correctly:
(let ((foo (decode-coding-string "foobar" 'chinese-gbk)))
(aset foo 0 ?\!!)
foo)
Thanks!
If emacs crashed, and you have the emacs process in the gdb debugger,
please include the output from the following gdb commands:
`bt full' and `xbacktrace'.
If you would like to further debug the crash, please read the file
/usr/local/share/emacs/23.0.0/etc/DEBUG for instructions.
In GNU Emacs 23.0.0.1 (i686-pc-linux-gnu, GTK+ Version 2.8.20)
of 2006-10-01 on kid
X server distributor `The X.Org Foundation', version 11.0.70101000
configured using `configure '--with-gtk''
Important settings:
value of $LC_ALL: nil
value of $LC_COLLATE: nil
value of $LC_CTYPE: zh_CN.UTF-8
value of $LC_MESSAGES: nil
value of $LC_MONETARY: nil
value of $LC_NUMERIC: nil
value of $LC_TIME: nil
value of $LANG: en_US.UTF-8
locale-coding-system: utf-8-unix
default-enable-multibyte-characters: t
Major mode: Lisp Interaction
Minor modes in effect:
shell-dirtrack-mode: t
delete-selection-mode: t
show-paren-mode: t
tooltip-mode: t
mouse-wheel-mode: t
file-name-shadow-mode: t
global-font-lock-mode: t
font-lock-mode: t
global-auto-composition-mode: t
auto-composition-mode: t
auto-compression-mode: t
line-number-mode: t
transient-mark-mode: t
abbrev-mode: t
Recent input:
C-h f r e p o <tab> r t - e m <tab> <return> M-x r
e p o r t - e m a c s - b u g <return>
Recent messages:
Loading /home/kid/emacs/init.d/60muse-bbs-smth.el (source)...done
Loading /home/kid/emacs/init.d/60muse-bbs.el (source)...done
Loading /home/kid/emacs/init.d/60muse-latex2png.el (source)...done
Loading /home/kid/emacs/init.d/60muse-srctag.el (source)...done
Loading /home/kid/emacs/init.d/60muse-ubb.el (source)...done
Loading /home/kid/.emms-cache...done
For information about the GNU Project and its goals, type C-h C-p.
Making completion list...
Type C-x 1 to remove help window.
Loading emacsbug...done
- Maybe bug with multibyte string and aset,
pluskid <=