From 8ed8d6979caed81fb477387ccb8579a8646b7bc0 Mon Sep 17 00:00:00 2001 From: David Frascone Date: Tue, 3 Mar 2020 10:43:54 -0700 Subject: [PATCH] Fix for when version is nil When version is nil, (version <==> other.version) also returns nil and then the nill object doesn't have a nonzero? method. I'm not sure what package put me into this state, but, this fix repaired my environment. Also, there is probably a more ruby-esque way to do this, but, I'm not a ruby expert ;-) --- Library/Homebrew/pkg_version.rb | 5 ++++- Library/Homebrew/test/pkg_version_spec.rb | 5 +++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/Library/Homebrew/pkg_version.rb b/Library/Homebrew/pkg_version.rb index 43b45d60eb..b08536bfa0 100644 --- a/Library/Homebrew/pkg_version.rb +++ b/Library/Homebrew/pkg_version.rb @@ -36,7 +36,10 @@ class PkgVersion def <=>(other) return unless other.is_a?(PkgVersion) - (version <=> other.version).nonzero? || revision <=> other.revision + comp_ver = (version <=> other.version) + return if comp_ver.nil? + + comp_ver.nonzero? || revision <=> other.revision end alias eql? == diff --git a/Library/Homebrew/test/pkg_version_spec.rb b/Library/Homebrew/test/pkg_version_spec.rb index 8e456ad623..474485ffe3 100644 --- a/Library/Homebrew/test/pkg_version_spec.rb +++ b/Library/Homebrew/test/pkg_version_spec.rb @@ -54,6 +54,11 @@ describe PkgVersion do describe "#<=>" do it "returns nil if the comparison fails" do expect(described_class.new(Version.create("1.0"), 0) <=> Object.new).to be nil + expect(Object.new <=> described_class.new(Version.create("1.0"), 0)).to be nil + expect(Object.new <=> described_class.new(Version.create("1.0"), 0)).to be nil + expect(described_class.new(Version.create("1.0"), 0) <=> nil).to be nil + # This one used to fail due to dereferencing a null `self` + expect(described_class.new(nil, 0) <=> described_class.new(Version.create("1.0"), 0)).to be nil end end