diff --git a/util/semver/set_test.go b/util/semver/set_test.go index a760012..3fa6237 100644 --- a/util/semver/set_test.go +++ b/util/semver/set_test.go @@ -196,6 +196,12 @@ func TestIntersect(t *testing.T) { {strs("[1.0.0:2.0.0]"), strs("[1.0.0:2.0.0)"), "{[1.0.0:2.0.0)}"}, {strs("<1.2.3"), strs("<=1.2.3"), "{[0.0.0-0:1.2.3)}"}, {strs("<=1.2.3"), strs("<1.2.3"), "{[0.0.0-0:1.2.3)}"}, + + // Bug regression: Intersecting [1.0.0, 1.0.0] with (1.0.0, inf) should be empty. + // We use <1.0.0 vs 1.0.0 to trigger [0, 1) vs [1, 1]. + {strs("<1.0.0"), strs("1.0.0"), "{}"}, + // We use >1.0.0 vs 1.0.0 to trigger (1, inf) vs [1, 1]. + {strs(">1.0.0"), strs("1.0.0"), "{}"}, } for _, test := range tests { set1 := Set{DefaultSystem, spans(t, test.s1...)} diff --git a/util/semver/span.go b/util/semver/span.go index 393f4aa..64c0e06 100644 --- a/util/semver/span.go +++ b/util/semver/span.go @@ -135,6 +135,9 @@ func newSpan(min *Version, minOpen bool, max *Version, maxOpen bool) (span, erro max.build = "" switch { case min.equal(max): + if minOpen || maxOpen { + return span{rank: empty}, nil + } return span{ minOpen: minOpen, maxOpen: maxOpen,