From: rubikitch Date: 2000-02-23T10:32:09+09:00 Subject: [ruby-list:20965] cgi.rb BUG? るびきちです。 最新版おっかけはやっていないのですが、 cgi.rb のバグ(?)を発見したので報告。 原因は 12316.chr を実行して error になっているところ。 irb(main):060:0> CGI::unescapeHTML 'んとにもう〜〜〜〜〜〜〜〜。
' TypeError: 12316 out of char range /usr/local/lib/ruby/1.4/cgi.rb:284:in `chr' /usr/local/lib/ruby/1.4/cgi.rb:284:in `unescapeHTML' /usr/local/lib/ruby/1.4/cgi.rb:277:in `gsub!' /usr/local/lib/ruby/1.4/cgi.rb:277:in `unescapeHTML' (irb):60:in `irb_binding' irb(main):061:0> load '/home/takashi/ruby/cgi.rb' true irb(main):062:0> CGI::unescapeHTML 'んとにもう〜〜〜〜〜〜〜〜。
' "んとにもう#12316#12316#12316#12316#12316#12316#12316#12316。
" irb(main):063:0> 12316.chr TypeError: 12316 out of char range (irb):63:in `chr' (irb):63:in `irb_binding' どうすればいいのかわからないので、以下のいんちきパッチで逃げました。 --- cgi.rb Sat Dec 11 13:13:29 1999 +++ /home/takashi/ruby/cgi.rb Wed Feb 23 10:15:39 2000 @@ -276,13 +276,17 @@ str = string.dup str.gsub!(/&(.*?);/n){ match = $1.dup - case match - when /\Aamp\z/ni then '&' - when /\Aquot\z/ni then '"' - when /\Agt\z/ni then '>' - when /\Alt\z/ni then '<' - when /\A#(\d+)\z/n then Integer($1).chr - when /\A#x([0-9a-f]+)\z/ni then $1.hex.chr + begin + case match + when /\Aamp\z/ni then '&' + when /\Aquot\z/ni then '"' + when /\Agt\z/ni then '>' + when /\Alt\z/ni then '<' + when /\A#(\d+)\z/n then Integer($1).chr + when /\A#x([0-9a-f]+)\z/ni then $1.hex.chr + end + rescue + match end } str るびきち☆