Actions
Bug #10504
closedGracefully handle CSV IO file descriptor problems
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
Updated by nobu (Nobuyoshi Nakada) about 10 years ago
- Description updated (diff)
- Status changed from Open to Assigned
- Assignee set to JEG2 (James Gray)
Updated by hsbt (Hiroshi SHIBATA) over 7 years ago
- Assignee changed from JEG2 (James Gray) to hsbt (Hiroshi SHIBATA)
Updated by hsbt (Hiroshi SHIBATA) about 7 years ago
- Status changed from Assigned to Closed
Applied in changeset trunk|r59642.
Gracefully handle CSV IO when file descriptor closed.
[Bug #10504][ruby-core:66240]
Actions
Like0
Like0Like0Like0