From: hsbt@... Date: 2017-05-10T11:51:10+00:00 Subject: [ruby-core:81093] [Ruby trunk Bug#10504] Gracefully handle CSV IO file descriptor problems 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: