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

ruby-changes:45333

From: nobu <ko1@a...>
Date: Mon, 23 Jan 2017 14:59:34 +0900 (JST)
Subject: [ruby-changes:45333] nobu:r57406 (trunk): csv.rb: fix field_size_limit check

nobu	2017-01-23 14:59:28 +0900 (Mon, 23 Jan 2017)

  New Revision: 57406

  https://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=revision&revision=57406

  Log:
    csv.rb: fix field_size_limit check
    
    * lib/csv.rb (CSV#shift): the last column is an Array in extended
      column since r55985.  [ruby-dev:49964] [Bug #13149]

  Modified files:
    trunk/lib/csv.rb
    trunk/test/csv/test_csv_parsing.rb
Index: lib/csv.rb
===================================================================
--- lib/csv.rb	(revision 57405)
+++ lib/csv.rb	(revision 57406)
@@ -1927,7 +1927,7 @@ class CSV https://github.com/ruby/ruby/blob/trunk/lib/csv.rb#L1927
         if @io.eof?
           raise MalformedCSVError,
                 "Unclosed quoted field on line #{lineno + 1}."
-        elsif @field_size_limit and csv.last.size >= @field_size_limit
+        elsif @field_size_limit and csv.last.sum(&:size) >= @field_size_limit
           raise MalformedCSVError, "Field size exceeded on line #{lineno + 1}."
         end
         # otherwise, we need to loop and pull some more data to complete the row
Index: test/csv/test_csv_parsing.rb
===================================================================
--- test/csv/test_csv_parsing.rb	(revision 57405)
+++ test/csv/test_csv_parsing.rb	(revision 57406)
@@ -209,6 +209,28 @@ class TestCSV::Parsing < TestCSV https://github.com/ruby/ruby/blob/trunk/test/csv/test_csv_parsing.rb#L209
                              field_size_limit: 2048 )
   end
 
+  def test_field_size_limit_in_extended_column_not_exceeding
+    data = <<~DATA
+      "a","b"
+      "
+      2
+      ",""
+    DATA
+    assert_nothing_raised(CSV::MalformedCSVError) do
+      CSV.parse(data, field_size_limit: 4)
+    end
+  end
+
+  def test_field_size_limit_in_extended_column_exceeding
+    data = <<~DATA
+      "a","b"
+      "
+      2345
+      ",""
+    DATA
+    assert_parse_errors_out(data, field_size_limit: 5)
+  end
+
   private
 
   def assert_parse_errors_out(*args)

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

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