[prime-dev: 776] 計算で落ちる

Zurück zum Archiv-Index

Takuro Ashie ashie****@homa*****
2005年 11月 16日 (水) 11:56:06 JST


足永です。

何やら秘孔を突いてしまったようなので、とりあえず報告しておきます。
計算をする時に、*の変わりに間違ってxを入力するとPRIMEが落ちてしまいました。
(7480*23= -> 7480x23)

落ちるのは連文節プロトコルのみで、単文節プロトコルでは落ちません。
以下がエラーメッセージです。


session_start
ok
1

edit_insert     1       7480x23=
ok
7480x23=

conv_convert    1
/usr/lib/ruby/1.8/prime/engine/engine-number.rb:49:in `calc': (eval):1:in `calc': compile error (SyntaxError)
(eval):1: syntax error
7480x23
       ^        from /usr/lib/ruby/1.8/prime/engine/engine-number.rb:38:in `eval'
        from /usr/lib/ruby/1.8/prime/engine/engine-number.rb:49:in `calc'
        from /usr/lib/ruby/1.8/prime/engine/engine-number.rb:38:in `search_overall'
        from /usr/lib/ruby/1.8/prime/engine/engine-number.rb:37:in `each'
        from /usr/lib/ruby/1.8/prime/engine/engine-number.rb:37:in `search_overall'
        from /usr/lib/ruby/1.8/prime/engine/engine-number.rb:27:in `search'
        from /usr/lib/ruby/1.8/prime/session.rb:35:in `command'
        from /usr/lib/ruby/1.8/prime/session.rb:34:in `map'
         ... 12 levels...
        from /usr/lib/ruby/1.8/prime/server.rb:25:in `session_loop'
        from /usr/lib/ruby/1.8/prime/server.rb:138:in `start'
        from /usr/bin/prime:164:in `main'
        from /usr/bin/prime:184


該当個所を見ると、

  def calc (string)
    if string =~ /[-+*\/ 0-9()]+=$/ then
      begin
        return eval(string[0..-2]).to_s
  ...

となっていて、x以降(23=)がマッチしているのにも関わらず、文字列全体
(7480x23=)をeval しているので落ちる、ということのようです。

    if string =~ /^[0-9( ]+[-+*\/ 0-9()]+=$/ then

でとりあえずある程度は通りますが、完全に文法エラーは防げません。
SyntaxErrorでresucueするととりあえずは落ちなくなりますが、もう少し厳密な
チェックをした方が良い?



Prime-dev メーリングリストの案内
Zurück zum Archiv-Index