summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/csv.rb2
-rwxr-xr-xtest/csv/test_interface.rb8
2 files changed, 9 insertions, 1 deletions
diff --git a/lib/csv.rb b/lib/csv.rb
index b16e817d09..20c9f152a8 100644
--- a/lib/csv.rb
+++ b/lib/csv.rb
@@ -1291,7 +1291,7 @@ class CSV
begin
yield csv
ensure
- csv.close
+ csv.closed? || csv.close
end
else
csv
diff --git a/test/csv/test_interface.rb b/test/csv/test_interface.rb
index f2c774f606..be27fcd616 100755
--- a/test/csv/test_interface.rb
+++ b/test/csv/test_interface.rb
@@ -137,6 +137,14 @@ class TestCSV::Interface < TestCSV
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