[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Bus error on backward search
- To: NIIMI Satoshi <sa2c@xxxxxxxx>
- Cc: mule-ja@xxxxxxxx
- From: Kenichi Handa <handa@xxxxxxxx>
- Subject: Re: Bus error on backward search
- Date: Fri, 17 Nov 2006 21:14:20 +0900
- User-agent: SEMI/1.14.3 (Ushinoya) FLIM/1.14.2 (Yagi-Nishiguchi) APEL/10.2 Emacs/22.0.50 (i686-pc-linux-gnu) MULE/5.0 (SAKAKI)
返事が遅れて申し訳けありません。
In article <4556DA0F.3040700@xxxxxxxx>, NIIMI Satoshi <sa2c@xxxxxxxx> writes:
> (with-temp-buffer
> (let ((case-fold-search t))
> (insert "abcd")
> (goto-char (point-max))
> (search-backward "iテスト" nil t)))
> これを評価すると
> simple_search (n=-1, pat="iテスト", len=4, len_byte=10, trt,
> pos=5, pos_byte=5, lim=1, lim_byte=1)
> このような呼び出しがされます。そうすると src/search.c
> 1512: int this_pos_byte = pos_byte - len_byte;
> ここで this_pos_byte = -5 となり、
> 1526: buf_ch = STRING_CHAR_AND_LENGTH (BYTE_POS_ADDR (this_pos_byte),
> 1527: ZV_BYTE - this_pos_byte,
> 1528: buf_charlen);
> ここでバッファ外にアクセスしてしまいます。検索文字列に含まれるマルチバイ
> ト文字が多いと len と len_byte の差が大きくなり、バスエラーを引き起こし
> ているようです。
> これを防ぐためには、先日のパッチのように this_pos_byte と lim_byte の比
> 較も必要になります。
ありがとうございます。このパッチ以下の ChangeLog で commit し
ました。
2006-11-17 NIIMI Satoshi <sa2c@xxxxxxxx> (tiny change)
* search.c (simple_search): In the loop of backward searching,
check also the byte position against the limit.
---
半田@AIST