From 4f98752f4e1ab263f0376e3a4e47b8f7835302b6 Mon Sep 17 00:00:00 2001 From: Philip Cunningham <pcunningham@gitlab.com> Date: Wed, 8 May 2024 08:09:30 +0000 Subject: [PATCH] Revert "Merge branch 'upgrade-to-semver_dialects-3.0.0' into 'master'" This reverts merge request !151761 --- Gemfile | 2 +- Gemfile.checksum | 2 +- Gemfile.lock | 4 +- app/models/concerns/enums/sbom.rb | 4 +- ee/app/models/package_metadata/package.rb | 18 +--- .../affected_version_range_matcher.rb | 2 +- .../affected_version_range_matcher.rb | 2 +- .../advisory_scanner_spec.rb | 2 +- .../affected_version_range_matcher_spec.rb | 6 +- .../affected_version_range_matcher_spec.rb | 93 ++++--------------- .../models/package_metadata/package_spec.rb | 31 ------- 11 files changed, 32 insertions(+), 134 deletions(-) diff --git a/Gemfile b/Gemfile index 05bffb2379b2f4..dbcfa48c55d8dd 100644 --- a/Gemfile +++ b/Gemfile @@ -274,7 +274,7 @@ gem 're2', '2.7.0' # rubocop:todo Gemfile/MissingFeatureCategory # Misc -gem 'semver_dialects', '~> 3.0', feature_category: :software_composition_analysis +gem 'semver_dialects', '~> 2.0', '>= 2.0.2', feature_category: :static_application_security_testing gem 'version_sorter', '~> 2.3' # rubocop:todo Gemfile/MissingFeatureCategory gem 'csv_builder', path: 'gems/csv_builder' # rubocop:todo Gemfile/MissingFeatureCategory diff --git a/Gemfile.checksum b/Gemfile.checksum index 8274f9563da689..ebaa132507a814 100644 --- a/Gemfile.checksum +++ b/Gemfile.checksum @@ -620,7 +620,7 @@ {"name":"sd_notify","version":"0.1.1","platform":"ruby","checksum":"cbc7ac6caa7cedd26b30a72b5eeb6f36050dc0752df263452ea24fb5a4ad3131"}, {"name":"seed-fu","version":"2.3.7","platform":"ruby","checksum":"f19673443e9af799b730e3d4eca6a89b39e5a36825015dffd00d02ea3365cf74"}, {"name":"selenium-webdriver","version":"4.19.0","platform":"ruby","checksum":"4c8bd1d6016a456154b4ba71a3bb4d532a0ae185a38acf9cec0acbd38b4e5066"}, -{"name":"semver_dialects","version":"3.0.0","platform":"ruby","checksum":"daab2476c2a5d779e1c97ae9b92e59803757e679453692402dfbe364c3cf7b3e"}, +{"name":"semver_dialects","version":"2.0.2","platform":"ruby","checksum":"60059c9f416f931b5212d862fad2879d6b9affb8e0b9afb0d91b793639c116fe"}, {"name":"sentry-rails","version":"5.17.3","platform":"ruby","checksum":"017771c42d739c0ad2213a581ca9d005cf543227bc13662cd1ca9909f2429459"}, {"name":"sentry-ruby","version":"5.17.3","platform":"ruby","checksum":"61791a4b0bb0f95cd87aceeaa1efa6d4ab34d64236c9d5df820478adfe2fbbfc"}, {"name":"sentry-sidekiq","version":"5.17.3","platform":"ruby","checksum":"d0714a218999e41e38127d0c174e0ee62a32b069f92e85b544e0c2125eca2c58"}, diff --git a/Gemfile.lock b/Gemfile.lock index ffd36555223e79..e8cc216b98dc91 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1652,7 +1652,7 @@ GEM rexml (~> 3.2, >= 3.2.5) rubyzip (>= 1.2.2, < 3.0) websocket (~> 1.0) - semver_dialects (3.0.0) + semver_dialects (2.0.2) deb_version (~> 1.0.1) pastel (~> 0.8.0) thor (~> 1.3) @@ -2209,7 +2209,7 @@ DEPENDENCIES sd_notify (~> 0.1.0) seed-fu (~> 2.3.7) selenium-webdriver (~> 4.19) - semver_dialects (~> 3.0) + semver_dialects (~> 2.0, >= 2.0.2) sentry-rails (~> 5.17.3) sentry-ruby (~> 5.17.3) sentry-sidekiq (~> 5.17.3) diff --git a/app/models/concerns/enums/sbom.rb b/app/models/concerns/enums/sbom.rb index 3f573004a71d87..9ca24e61a61a09 100644 --- a/app/models/concerns/enums/sbom.rb +++ b/app/models/concerns/enums/sbom.rb @@ -7,10 +7,10 @@ class Sbom }.with_indifferent_access.freeze PURL_TYPES = { - composer: 1, # refered to as `packagist` in gemnasium-db and semver_dialects + composer: 1, # refered to as `packagist` in gemnasium-db conan: 2, gem: 3, - golang: 4, # refered to as `go` in gemnasium-db and semver_dialects + golang: 4, # refered to as `go` in gemnasium-db maven: 5, npm: 6, nuget: 7, diff --git a/ee/app/models/package_metadata/package.rb b/ee/app/models/package_metadata/package.rb index 086929185a8ac2..806b166a47a662 100644 --- a/ee/app/models/package_metadata/package.rb +++ b/ee/app/models/package_metadata/package.rb @@ -87,23 +87,13 @@ def default_license_ids(version:) end def version_in_default_licenses_range?(input_version) - type = - case purl_type - when 'golang' - 'go' - when 'composer' - 'packagist' - else - purl_type - end - # Remove 'v' from version string(if present) before comparison. - interval = SemverDialects::IntervalParser.parse(type, "=#{input_version.delete_prefix('v')}") + interval = VersionParser.parse("=#{input_version.delete_prefix('v')}") - range = SemverDialects::IntervalSet.new - range.add(SemverDialects::IntervalParser.parse(type, "<#{lowest_version.delete_prefix('v')}")) if lowest_version + range = VersionRange.new + range.add(VersionParser.parse("<#{lowest_version.delete_prefix('v')}")) if lowest_version - range.add(SemverDialects::IntervalParser.parse(type, ">#{highest_version.delete_prefix('v')}")) if highest_version + range.add(VersionParser.parse(">#{highest_version.delete_prefix('v')}")) if highest_version !range.overlaps_with?(interval) rescue SemverDialects::InvalidConstraintError => err diff --git a/ee/lib/gitlab/vulnerability_scanning/container_scanning/affected_version_range_matcher.rb b/ee/lib/gitlab/vulnerability_scanning/container_scanning/affected_version_range_matcher.rb index 232c241c9a39d4..db4d21c7e10631 100644 --- a/ee/lib/gitlab/vulnerability_scanning/container_scanning/affected_version_range_matcher.rb +++ b/ee/lib/gitlab/vulnerability_scanning/container_scanning/affected_version_range_matcher.rb @@ -20,7 +20,7 @@ def affected? # a wildcard range means that all versions are affected return true if range == '*' - SemverDialects.version_satisfies?(purl_type, version, range) + SemverDialects::VersionChecker.version_sat?(purl_type, version, range) end private diff --git a/ee/lib/gitlab/vulnerability_scanning/dependency_scanning/affected_version_range_matcher.rb b/ee/lib/gitlab/vulnerability_scanning/dependency_scanning/affected_version_range_matcher.rb index bf43808eee8223..5aa548a37a4680 100644 --- a/ee/lib/gitlab/vulnerability_scanning/dependency_scanning/affected_version_range_matcher.rb +++ b/ee/lib/gitlab/vulnerability_scanning/dependency_scanning/affected_version_range_matcher.rb @@ -23,7 +23,7 @@ def affected? purl_type end - SemverDialects.version_satisfies?(type, version, range) + SemverDialects::VersionChecker.version_sat?(type, version, range) end end end diff --git a/ee/spec/lib/gitlab/vulnerability_scanning/advisory_scanner_spec.rb b/ee/spec/lib/gitlab/vulnerability_scanning/advisory_scanner_spec.rb index 5a40d2be309777..f0cf42ad4e7078 100644 --- a/ee/spec/lib/gitlab/vulnerability_scanning/advisory_scanner_spec.rb +++ b/ee/spec/lib/gitlab/vulnerability_scanning/advisory_scanner_spec.rb @@ -121,7 +121,7 @@ advisory = affected_package.advisory pipeline = affected_pipeline expect(Gitlab::ErrorTracking).to have_received(:track_exception) - .with(a_kind_of(::SemverDialects::InvalidVersionError), + .with(an_instance_of(::SemverDialects::InvalidVersionError), message: 'Cannot determine if component is affected', purl_type: 'npm', version: 'invalid-version', diff --git a/ee/spec/lib/gitlab/vulnerability_scanning/container_scanning/affected_version_range_matcher_spec.rb b/ee/spec/lib/gitlab/vulnerability_scanning/container_scanning/affected_version_range_matcher_spec.rb index e7977df3a7c628..ddf4ab7d55951e 100644 --- a/ee/spec/lib/gitlab/vulnerability_scanning/container_scanning/affected_version_range_matcher_spec.rb +++ b/ee/spec/lib/gitlab/vulnerability_scanning/container_scanning/affected_version_range_matcher_spec.rb @@ -7,7 +7,7 @@ describe 'affected?' do before do - allow(SemverDialects).to receive(:version_satisfies?).and_return true + allow(SemverDialects::VersionChecker).to receive(:version_sat?).and_return true end let_it_be(:purl_type) { 'deb' } @@ -70,8 +70,8 @@ end end - it 'calls SemverDialects.version_satisfies? with the expected arguments' do - expect(SemverDialects).to receive(:version_satisfies?).with(purl_type, version, range) + it 'calls SemverDialects::VersionChecker.version_sat? with the expected arguments' do + expect(SemverDialects::VersionChecker).to receive(:version_sat?).with(purl_type, version, range) affected end diff --git a/ee/spec/lib/gitlab/vulnerability_scanning/dependency_scanning/affected_version_range_matcher_spec.rb b/ee/spec/lib/gitlab/vulnerability_scanning/dependency_scanning/affected_version_range_matcher_spec.rb index 46df3f9a63a525..139726bb761281 100644 --- a/ee/spec/lib/gitlab/vulnerability_scanning/dependency_scanning/affected_version_range_matcher_spec.rb +++ b/ee/spec/lib/gitlab/vulnerability_scanning/dependency_scanning/affected_version_range_matcher_spec.rb @@ -5,87 +5,26 @@ RSpec.describe Gitlab::VulnerabilityScanning::DependencyScanning::AffectedVersionRangeMatcher, feature_category: :vulnerability_management do using RSpec::Parameterized::TableSyntax - subject(:affected) do - described_class.new( - purl_type: purl_type, range: range, version: version - ).affected? + where(:purl_type, :range, :version, :expected_result) do + 'maven' | '[,2.5]' | '1.2' | true + 'pypi' | '<=1.11.0' | '1.11' | true + 'composer' | '<=2.2.1' | '2.2.0' | true + 'golang' | '<=1.11.0' | '1.11' | true + 'maven' | '[,2.5]' | '4.3' | false + 'pypi' | '<=1.11.0' | '2.13' | false + 'composer' | '<=2.2.1' | '2.4.0' | false + 'golang' | '<=1.11.0' | '2.11' | false end - context 'when version is in range' do - where(:purl_type, :range, :version) do - 'composer' | '<=2.2.1' | '2.2.1' - 'conan' | '<=2.2.1' | '2.2.1' - 'gem' | '<=2.2.1.pre' | '2.2.1.pre' - 'golang' | '<=2.2.1' | '2.2.1' - 'maven' | '[,2.5]' | '2.5' - 'npm' | '<=2.2.1' | '2.2.1' - 'nuget' | '[,1.2.3.0]' | '1.2.3.0' - 'pypi' | '<=1.11.0' | '1.11' + with_them do + subject(:affected) do + described_class.new( + purl_type: purl_type, range: range, version: version + ).affected? end - with_them do - specify do - expect(affected).to be_truthy - end - end - end - - context 'when version is not in range' do - where(:purl_type, :range, :version) do - 'composer' | '<=2.2.1' | '2.2.2' - 'conan' | '<=2.2.1' | '2.2.2' - 'gem' | '<=2.2.1.pre' | '2.2.1' - 'golang' | '<=2.2.1' | '2.2.2' - 'maven' | '[,2.5]' | '2.6' - 'npm' | '<=2.2.1' | '2.2.2' - 'nuget' | '[,1.2.3.0]' | '1.2.3.1' - 'pypi' | '<=1.11.0' | '1.11.1' - end - - with_them do - specify do - expect(affected).to be_falsey - end - end - end - - context 'when version is invalid' do - where(:purl_type, :range, :version) do - 'composer' | '<1.0.0' | 'dev-master' - 'conan' | '[,1.0.0]' | 'x' - 'gem' | '<1.0.0' | '1.2.3.*' - 'golang' | '<1.0.0' | '1.2.3x' - 'maven' | '[,1.0.0]' | '?' - 'npm' | '<1.0.0' | '1.2.3x' - 'nuget' | '<1.0.0' | '1.2.3x' - 'pypi' | '<1.0.0' | 'x' - end - - with_them do - specify do - expect { affected }.to raise_error(SemverDialects::InvalidVersionError) - end - end - end - - context 'when range is invalid' do - let(:version) { '1.2.3' } - - where(:purl_type, :range) do - 'composer' | '<dev-master' - 'conan' | '-' - 'gem' | '<1.2.3.*' - 'golang' | '<1.2.3x' - 'maven' | '-' - 'npm' | '<1.2.3x' - 'nuget' | '<1.2.3x' - 'pypi' | '[,1.0.0]' - end - - with_them do - specify do - expect { affected }.to raise_error(SemverDialects::InvalidConstraintError) - end + specify do + expect(affected).to eq(expected_result) end end end diff --git a/ee/spec/models/package_metadata/package_spec.rb b/ee/spec/models/package_metadata/package_spec.rb index d62621fe64634b..8bfeaace484e81 100644 --- a/ee/spec/models/package_metadata/package_spec.rb +++ b/ee/spec/models/package_metadata/package_spec.rb @@ -54,37 +54,6 @@ end end - context 'and the PURL type is supported' do - context 'and the input version matches the default licenses' do - let(:license_ids) { package.license_ids_for(version: input_version) } - - where(:purl_type, :input_version) do - 'composer' | '2.2.2' - 'conan' | '2.2.2' - 'gem' | '2.2.1.rc.1' - 'golang' | '2.2.2-alpha1' - 'maven' | '2.6a1' - 'npm' | '2.2.2-alpha1' - 'nuget' | '2.2.2-alpha1' - 'pypi' | '1.11-dev1' - end - - with_them do - let(:package) do - build_stubbed(:pm_package, name: "cliui", purl_type: purl_type, - licenses: [default, lowest, highest, other]) - end - - let(:lowest) { '0.0.0' } - let(:highest) { input_version } - - subject(:license_ids) { package.license_ids_for(version: input_version) } - - specify { expect(license_ids).to eq(default) } - end - end - end - context 'and the given version causes semver_dialects to raise an exception while parsing' do let(:package) do build_stubbed(:pm_package, name: "cliui", purl_type: "npm", licenses: [default, lowest, highest, other]) -- GitLab