FIX: Ensure TarReader is closed.

FIX: Ensure TarReader is closed.

diff --git a/lib/discourse_ip_info.rb b/lib/discourse_ip_info.rb
index 70819ad..b67f5cd 100644
--- a/lib/discourse_ip_info.rb
+++ b/lib/discourse_ip_info.rb
@@ -26,23 +26,27 @@ class DiscourseIpInfo
 
     uri = URI("https://geolite.maxmind.com/download/geoip/database/#{name}.tar.gz")
 
-    tar_gz_file = Tempfile.new
     begin
+      tar_gz_file = Tempfile.new
       tar_gz_file.binmode
       tar_gz_file.write(Net::HTTP.get(uri))
       tar_gz_file.close
 
-      extractor = Gem::Package::TarReader.new(Zlib::GzipReader.open(tar_gz_file.path))
-      extractor.rewind
+      begin
+        extractor = Gem::Package::TarReader.new(Zlib::GzipReader.open(tar_gz_file.path))
+        extractor.rewind
 
-      extractor.each do |entry|
-        next unless entry.full_name.ends_with?(".mmdb")
-        File.open(mmdb_path(name), "wb") { |f| f.write(entry.read) }
+        extractor.each do |entry|
+          next unless entry.full_name.ends_with?(".mmdb")
+          File.open(mmdb_path(name), "wb") { |f| f.write(entry.read) }
+        end
+      ensure
+        extractor.close
       end
+
     ensure
       tar_gz_file.close
       tar_gz_file.unlink
-      extractor.close
     end
   end

GitHub sha: a7236995

1 Like