るびきちです。

最新版おっかけはやっていないのですが、
cgi.rb のバグ(?)を発見したので報告。

原因は 12316.chr を実行して error になっているところ。


irb(main):060:0> CGI::unescapeHTML 'んとにもう&#12316;&#12316;&#12316;&#12316;&#12316;&#12316;&#12316;&#12316;。<br>'
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;。<br>'
"んとにもう#12316#12316#12316#12316#12316#12316#12316#12316。<br>"
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

るびきち☆