[前][次][番号順一覧][スレッド一覧]

ruby-changes:20552

From: marcandre <ko1@a...>
Date: Fri, 22 Jul 2011 07:04:24 +0900 (JST)
Subject: [ruby-changes:20552] marcandRe: r32600 (trunk): * lib/csv.rb: Do not modify CSV.generate's argument

marcandre	2011-07-22 06:37:43 +0900 (Fri, 22 Jul 2011)

  New Revision: 32600

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=32600

  Log:
    * lib/csv.rb: Do not modify CSV.generate's argument [ruby-core:38356]

  Modified files:
    trunk/ChangeLog
    trunk/lib/csv.rb
    trunk/test/csv/test_interface.rb

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 32599)
+++ ChangeLog	(revision 32600)
@@ -1,3 +1,7 @@
+Fri Jul 22 06:37:13 2011  Marc-Andre Lafortune  <ruby-core@m...>
+
+	* lib/csv.rb: Do not modify CSV.generate's argument [ruby-core:38356]
+
 Thu Jul 21 20:59:59 2011  Tanaka Akira  <akr@f...>
 
 	* ext/socket/ancdata.c (discard_cmsg): workaround for MacOS X Lion.
Index: lib/csv.rb
===================================================================
--- lib/csv.rb	(revision 32599)
+++ lib/csv.rb	(revision 32600)
@@ -1234,7 +1234,7 @@
       io.seek(0, IO::SEEK_END)
       args.unshift(io)
     else
-      encoding = args.last.is_a?(Hash) ? args.last.delete(:encoding) : nil
+      encoding = (args[-1] = args[-1].dup).delete(:encoding) if args.last.is_a?(Hash)
       str      = ""
       str.encode!(encoding) if encoding
       args.unshift(str)
Index: test/csv/test_interface.rb
===================================================================
--- test/csv/test_interface.rb	(revision 32599)
+++ test/csv/test_interface.rb	(revision 32600)
@@ -316,4 +316,19 @@
     assert_equal(STDOUT, CSV.instance.instance_eval { @io })
     assert_equal(STDOUT, CSV { |new_csv| new_csv.instance_eval { @io } })
   end
+
+  def test_options_are_not_modified
+    opt = {}.freeze
+    assert_nothing_raised {  CSV.foreach(@path, opt)       }
+    assert_nothing_raised {  CSV.open(@path, opt){}        }
+    assert_nothing_raised {  CSV.parse("", opt)            }
+    assert_nothing_raised {  CSV.parse_line("", opt)       }
+    assert_nothing_raised {  CSV.read(@path, opt)          }
+    assert_nothing_raised {  CSV.readlines(@path, opt)     }
+    assert_nothing_raised {  CSV.table(@path, opt)         }
+    assert_nothing_raised {  CSV.generate(opt){}           }
+    assert_nothing_raised {  CSV.generate_line([], opt)    }
+    assert_nothing_raised {  CSV.filter("", "", opt){}     }
+    assert_nothing_raised {  CSV.instance("", opt)         }
+  end
 end

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]