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