From ashie @ homa.ne.jp Wed Nov 16 11:56:06 2005 From: ashie @ homa.ne.jp (Takuro Ashie) Date: Wed, 16 Nov 2005 11:56:06 +0900 Subject: [prime-dev: 776] =?iso-2022-jp?b?GyRCN1c7OyRHTW4kQSRrGyhC?= Message-ID: <20051116115606.acbc7522.ashie@homa.ne.jp> 足永です。 何やら秘孔を突いてしまったようなので、とりあえず報告しておきます。 計算をする時に、*の変わりに間違って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するととりあえずは落ちなくなりますが、もう少し厳密な チェックをした方が良い?