Sha256: 861402a91f32f8639343cb71bc18cfd0df9466c9318b7d1f534ca93315b51093
Contents?: true
Size: 1.27 KB
Versions: 2
Compression:
Stored size: 1.27 KB
Contents
# frozen_string_literal: true module Rubocop module Cop module Performance # Flags inefficient uses of rubyzip's Zip::File, since when instantiated # it reads the file's Central Directory into memory entirely. For zips with many # files and directories, this can be very expensive even when the archive's size # in bytes is small. # # See also: # - https://github.com/rubyzip/rubyzip/issues/506 # - https://github.com/rubyzip/rubyzip#notes-on-zipinputstream class Rubyzip < RuboCop::Cop::Base MSG = 'Be careful when opening or iterating zip files via Zip::File. ' \ 'Zip archives may contain many entries, and their file index is ' \ 'read into memory upon construction, which can lead to ' \ 'high memory use and poor performance. ' \ 'Consider iterating archive entries via Zip::InputStream instead.' # @!method reads_central_directory?(node) def_node_matcher :reads_central_directory?, <<-PATTERN (send (const (const {nil? (cbase)} :Zip) :File) {:new :open :foreach} ...) PATTERN def on_send(node) return unless reads_central_directory?(node) add_offense(node) end end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
gitlab-styles-13.0.1 | lib/rubocop/cop/performance/rubyzip.rb |
gitlab-styles-13.0.0 | lib/rubocop/cop/performance/rubyzip.rb |