Project

General

Profile

Actions

Bug #10504

closed

Gracefully handle CSV IO file descriptor problems

Added by jackdanger (Jack Danger) over 9 years ago. Updated over 6 years ago.

Status:
Closed
Target version:
ruby -v:
ruby 2.2.0dev (2014-11-13 trunk 48392) [x86_64-darwin13]
[ruby-core:66240]

Description

This patch allows CSV.open to more gracefully handle user error. Because the IO object is passed to the user-provided block it's entirely possible the IO object can be closed before the block finishes. This would raise an error in the ensure clause of CSV.open.

Index: lib/csv.rb
===================================================================
--- lib/csv.rb	(revision 48392)
+++ lib/csv.rb	(working copy)
@@ -1272,7 +1272,7 @@
       begin
         yield csv
       ensure
-        csv.close
+        csv.closed? || csv.close
       end
     else
       csv
Index: test/csv/test_interface.rb
===================================================================
--- test/csv/test_interface.rb	(revision 48392)
+++ test/csv/test_interface.rb	(working copy)
@@ -136,6 +136,14 @@
     end
   end
 
+  def test_open_handles_prematurely_closed_file_descriptor_gracefully
+    assert_nothing_raised(Exception) do
+      CSV.open(@path) do |csv|
+        csv.close
+      end
+    end
+  end
+
   ### Test Write Interface ###
 
   def test_generate

Files

csv_handle_file_descriptor_gracefully.diff (783 Bytes) csv_handle_file_descriptor_gracefully.diff jackdanger (Jack Danger), 11/13/2014 12:13 AM
Actions

Also available in: Atom PDF

Like0
Like0Like0Like0