[Gauche-devel-jp] [0.9.5_pre2] stack overrun during matching regexp

Back to archive index

osamu ogurisu oguri****@gmail*****
2016年 8月 20日 (土) 18:01:51 JST


こんにちは、小栗栖です。

こちらに書くのは久しぶりです。

青空文庫のテキストからlatexのソースを出力するスクリプトを書いて遊んで
いたのですが、先日の 0.9.5_pre2 で思いがけず、単純に長い string に
rxmatch をかけるだけで string overrun during matching regexp になって
しまいました。

例えば、

(define (make-str s n) ; 単に長いstringを準備したいだけです。
  (with-output-to-string
    (lambda ()
      (dotimes (i n)
(display s)))))
(define (test3 text) ; こっちが本題
  (print (string-length text))
  (rxmatch #/([0-9]+abc)?(.*){.*abc}/ text))

に対して次のような実行結果になってしまいました。

gosh> (gauche-version)
"0.9.5_pre2"
gosh> (test3 (make-str "a" 1256)) ; こちらは期待通り
1256
#f
gosh> (test3 (make-str "a" 1257)) ; どうも長さ1256と1257が境のようです。
1257
*** ERROR: stack overrun during matching regexp #/([0-9]+abc)?(.*)\{.*abc\}/
Stack Trace:
_______________________________________
  0  (eval expr env)
        at
"/usr/local/share/gauche-0.9/0.9.5_pre2/lib/gauche/interactive.scm":282
gosh>

こちらの環境は debian jessie で、
0.9.5-pre2 の make chack は全てpassしています。

$ uname -a
Linux vivo 3.16.0-4-amd64 #1 SMP Debian 3.16.7-ckt25-2+deb8u3 (2016-07-02)
x86_64 GNU/Linux
$ gosh -V
Gauche scheme shell, version 0.9.5_pre2 [utf-8,pthreads],
x86_64-pc-linux-gnu

なお、jessie の package の gauche-0.9.4 では期待通りの動作になります。

gosh> (gauche-version)
"0.9.4"
gosh> (test3 (make-str "a" 1257))
1257
#f
gosh> (test3 (make-str "a" 1258))
1258
#f
gosh>

私の "0.9.5_pre2" の make がおかしいのかもしれませんが、0.9.5 の準備中
と思いますので、まずは報告しておきます。

小栗栖
-------------- next part --------------
HTML$B$NE:IU%U%!%$%k$rJ]4I$7$^$7$?(B...
Download 



Gauche-devel-jp メーリングリストの案内
Back to archive index