[ruby-core:81093] [Ruby trunk Bug#10504] Gracefully handle CSV IO file descriptor problems

From: hsbt@...
Date: 2017-05-10 11:51:10 UTC
List: ruby-core #81093
Issue #10504 has been updated by hsbt (Hiroshi SHIBATA).

Assignee changed from JEG2 (James Gray) to hsbt (Hiroshi SHIBATA)

----------------------------------------
Bug #10504: Gracefully handle CSV IO file descriptor problems
https://bugs.ruby-lang.org/issues/10504#change-64742

* Author: jackdanger (Jack Danger)
* Status: Assigned
* Priority: Normal
* Assignee: hsbt (Hiroshi SHIBATA)
* Target version: 2.2.0
* ruby -v: ruby 2.2.0dev (2014-11-13 trunk 48392) [x86_64-darwin13]
* Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN
----------------------------------------
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`. 

~~~diff
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)


-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request@ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>

In This Thread

Prev Next