Sha256: c69e71d3423c2c835d81268869989ff9d1b61b4f379787f4acdccc5e0271618b

Contents?: true

Size: 1.39 KB

Versions: 13

Compression:

Stored size: 1.39 KB

Contents

# frozen_string_literal: true

require 'bundler/audit'

module Unwrappr
  module Researchers
    # Checks for security vulnerabilities using the Advisory DB
    # https://github.com/rubysec/ruby-advisory-db
    #
    # Implements the `gem_researcher` interface required by the
    # LockFileAnnotator.
    class SecurityVulnerabilities
      Vulnerabilites = Struct.new(:patched, :introduced, :remaining)

      def research(gem_change, gem_change_info)
        gem_change_info.merge(
          security_vulnerabilities: vulnerabilities(gem_change)
        )
      end

      private

      def vulnerabilities(gem)
        advisories = database.advisories_for(gem.name)
        base_advisories = vulnerable_advisories(gem.base_version, advisories)
        head_advisories = vulnerable_advisories(gem.head_version, advisories)
        Vulnerabilites.new(
          base_advisories - head_advisories,
          head_advisories - base_advisories,
          base_advisories & head_advisories
        )
      end

      def database
        return @database if defined?(@database)

        Bundler::Audit::Database.update!(quiet: true)
        @database = Bundler::Audit::Database.new
      end

      def vulnerable_advisories(gem_version, advisories)
        return [] if gem_version.nil?

        advisories.select do |advisory|
          advisory.vulnerable?(gem_version.version)
        end
      end
    end
  end
end

Version data entries

13 entries across 13 versions & 1 rubygems

Version Path
unwrappr-0.8.2 lib/unwrappr/researchers/security_vulnerabilities.rb
unwrappr-0.8.1 lib/unwrappr/researchers/security_vulnerabilities.rb
unwrappr-0.8.0 lib/unwrappr/researchers/security_vulnerabilities.rb
unwrappr-0.7.0 lib/unwrappr/researchers/security_vulnerabilities.rb
unwrappr-0.6.0 lib/unwrappr/researchers/security_vulnerabilities.rb
unwrappr-0.5.0 lib/unwrappr/researchers/security_vulnerabilities.rb
unwrappr-0.4.0 lib/unwrappr/researchers/security_vulnerabilities.rb
unwrappr-0.3.5 lib/unwrappr/researchers/security_vulnerabilities.rb
unwrappr-0.3.4 lib/unwrappr/researchers/security_vulnerabilities.rb
unwrappr-0.3.3 lib/unwrappr/researchers/security_vulnerabilities.rb
unwrappr-0.3.2 lib/unwrappr/researchers/security_vulnerabilities.rb
unwrappr-0.3.1 lib/unwrappr/researchers/security_vulnerabilities.rb
unwrappr-0.3.0 lib/unwrappr/researchers/security_vulnerabilities.rb