[Hiki-cvs 1412] [959] * hiki/config.rb (load_cgi_conf): call eval() with binding, that

Back to archive index

svnno****@sourc***** svnno****@sourc*****
2009年 8月 15日 (土) 04:12:53 JST


Revision: 959
          http://sourceforge.jp/projects/hiki/svn/view?view=rev&revision=959
Author:   fdiary
Date:     2009-08-15 04:12:53 +0900 (Sat, 15 Aug 2009)

Log Message:
-----------
	* hiki/config.rb (load_cgi_conf): call eval() with binding, that
	is required for Ruby 1.9.

	* hiki/db/ptstore.rb: define commit_new if missing, that is
	required for Ruby 1.9.

	* hiki/db/tmarshal.rb: use Array#join instead of Array#to_s, whose
	specification is different between Ruby 1.8 and Ruby 1.9

Modified Paths:
--------------
    hiki/trunk/hiki/config.rb
    hiki/trunk/hiki/db/ptstore.rb
    hiki/trunk/hiki/db/tmarshal.rb

Modified: hiki/trunk/hiki/config.rb
===================================================================
--- hiki/trunk/hiki/config.rb	2009-08-09 10:50:08 UTC (rev 958)
+++ hiki/trunk/hiki/config.rb	2009-08-14 19:12:53 UTC (rev 959)
@@ -5,7 +5,7 @@
 
 module Hiki
   VERSION = '0.8.8'
-  RELEASE_DATE = '2009-08-09'
+  RELEASE_DATE = '2009-08-14'
 end
 
 # For backward compatibility
@@ -217,14 +217,19 @@
       begin
         cgi_conf = File.open( @config_file ){|f| f.read }.untaint
         cgi_conf.gsub!( /^[@$]/, '' )
-        def_vars = ''
-        variables.each do |var| def_vars << "#{var} = nil\n" end
-        eval( def_vars )
+        def_vars1 = ''
+        def_vars2 = ''
+        variables.each do |var|
+          def_vars1 << "#{var} = nil\n"
+          def_vars2 << "@#{var} = #{var} unless #{var} == nil\n"
+        end
+        b = binding.taint
+        eval( def_vars1, b )
         Thread.start {
           $SAFE = 4
           eval( cgi_conf, binding, "(hiki.conf)", 1 )
         }.join
-        variables.each do |var| eval "@#{var} = #{var} if #{var} != nil" end
+        eval( def_vars2, b )
       rescue IOError, Errno::ENOENT
       end
       @mail = [@mail].flatten # for backward compatibility

Modified: hiki/trunk/hiki/db/ptstore.rb
===================================================================
--- hiki/trunk/hiki/db/ptstore.rb	2009-08-09 10:50:08 UTC (rev 958)
+++ hiki/trunk/hiki/db/ptstore.rb	2009-08-14 19:12:53 UTC (rev 959)
@@ -116,6 +116,21 @@
   def load_file(file)
     TMarshal::load(file)
   end
+
+  private
+
+  # for Ruby 1.9
+  unless private_method_defined?('commit_new')
+    def commit_new(f)
+      f.truncate(0)
+      f.rewind
+      new_file = @filename + ".new"
+      File.open(new_file, RD_ACCESS) do |nf|
+        FileUtils.copy_stream(nf, f)
+      end
+      File.unlink(new_file)
+    end
+  end
 end
 
 if __FILE__ == $0

Modified: hiki/trunk/hiki/db/tmarshal.rb
===================================================================
--- hiki/trunk/hiki/db/tmarshal.rb	2009-08-09 10:50:08 UTC (rev 958)
+++ hiki/trunk/hiki/db/tmarshal.rb	2009-08-14 19:12:53 UTC (rev 959)
@@ -33,9 +33,9 @@
     when String
       obj.dump
     when Array
-      "[\n"+obj.collect{|x| dump_text(x)+",\n"}.to_s+"]"
+      "[\n"+obj.collect{|x| dump_text(x)+",\n"}.join+"]"
     when Hash
-      "{\n"+obj.sort_by{|e| e[0].inspect}.collect{|k,v| "#{dump_text(k)} => #{dump_text(v)},\n"}.to_s+"}"
+      "{\n"+obj.sort_by{|e| e[0].inspect}.collect{|k,v| "#{dump_text(k)} => #{dump_text(v)},\n"}.join+"}"
     when Numeric, Module, Regexp, Symbol, TrueClass, FalseClass, NilClass, Range
       obj.inspect
     when Time
@@ -45,3 +45,7 @@
     end
   end
 end
+
+if __FILE__ == $0
+  puts TMarshal.dump({:age => 22, :lang => 'Ruby', :man => true, :day => Time.now})
+end




Hiki-cvs メーリングリストの案内
Back to archive index