[Date Prev][Date Next][Thread Prev][][Date Index][Thread Index]

Re: Stack overflow in regexp matcher



野宮です.

ようやく時間が取れました.

>>>>> In the Message: [emacs-w3m ML: No.10290]
>>>>>   with the date of Tue, 15 Jul 2008 07:58:33 +0900
>>>>> Katsumi Yamaoka <yamaoka@xxxxxxx> has written:

>>    http://plusd.itmedia.co.jp/mobile/articles/0807/14/news031.html
>> のシリーズを shimbun で読もうとしますと,

>>  Stack overflow in regexp matcher

>> というエラーで蹴られ,読むことが出来ません.

> これは re-search-*, string-match, looking-at などを実行したとき
> に、その引数として渡された正規表現が単に複雑に過ぎたり、曖昧合致
> が入れ子になった要素 (極端な例: "\\(.*\\)*") を持っているために、
> 合致するテキストが非常に広範囲に及んでしまう場合に起きます。一般
> 的な解決策は、その正規表現の見直しと、必要なら正規表現を小分けに
> して一回で行なおうとしていた正規表現サーチを多段階で行なうように
> することです。

う〜む,難しそうですね.

>> Backtrace を添付しますので,原因をお教え戴ければ幸甚です.

>> Debugger entered--Lisp error: (error "Stack overflow in regexp matcher")
>>   signal(error ("Stack overflow in regexp matcher"))
>>   byte-code("\301 \210\302^H@^HA\"\207" [err wl-message-buffer-cache-delete
>>   wl-message-buffer-display([elmo-shimbun-folder [0 0 0 0 0 0 0] shimbun

> これだと、残念ながら原因が Wanderlust にあるのか shimbun にある
> のか、少なくともぼくにはわかりません。野宮さんには何度も何度も何
> 度も申し上げているのですが、byte-code(...) という要素がソースコー
> ドの表現に展開されるまで backtrace を採り直す努力をしていただけ
> ると、他の人が直接の原因を見つける助けになります。

> cf. http://www.jpl.org/elips/BUGS-ja.html

これは拝見していました.
ただ.

「これは byte-code(...) という関数が wl-message-buffer-display という
  関数から呼ばれてエラーが起きているのですが、このように byte compile
  された関数が何で、どこで定義されているかを知ることは事実上不可能です。」

と書かれてありますので,小生には無理だと思っていました.

> この場合は wl-message.el を load することから始めてください。

そうでしたか.

やってみましたところ,sb-itmedia.el の

(when (and (re-search-forward "\
\\(<h[0-9]>[^<]+</h[0-9]>[^<]*\\(\\(?:<[^>h][^>]*>[^<]*\\)*\\)\\)?<!--BODY-->"
				      nil t)

の正規表現が原因で,これを

(when (and (re-search-forward "\
<!--BODY-->"
				      nil t)

と書き換えましたら,問題が解消しました.

どうも,お騒がせし,申し訳ありません.m(_ _)m

---
  野宮