Skip to content

Commit cd08691

Browse files
authored
Fix a crashing bug (flutter#19)
VersionRange.difference() with a VersionUnion didn't expect to get an empty constraint, but it was possible to do so. Closes flutter#18
1 parent d32228c commit cd08691

File tree

4 files changed

+17
-2
lines changed

4 files changed

+17
-2
lines changed

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
# 1.3.3
2+
3+
* Fix a bug where `VersionRange.difference()` with a union constraint that
4+
covered the entire range would crash.
5+
16
# 1.3.2
27

38
* Fix a checked-mode error in `VersionRange.difference()`.

lib/src/version_range.dart

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -379,7 +379,9 @@ class VersionRange implements Comparable<VersionRange>, VersionConstraint {
379379
if (strictlyHigher(range, current)) break;
380380

381381
var difference = current.difference(range);
382-
if (difference is VersionUnion) {
382+
if (difference.isEmpty) {
383+
return VersionConstraint.empty;
384+
} else if (difference is VersionUnion) {
383385
// If [range] split [current] in half, we only need to continue
384386
// checking future ranges against the latter half.
385387
assert(difference.ranges.length == 2);

pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
name: pub_semver
2-
version: 1.3.3-dev
2+
version: 1.3.3
33
author: Dart Team <[email protected]>
44
description: >
55
Versions and version constraints implementing pub's versioning policy. This

test/version_range_test.dart

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -606,6 +606,14 @@ main() {
606606
new VersionRange(min: v130, max: v140)
607607
])));
608608
});
609+
610+
test("with a version union that covers the whole range, returns empty", () {
611+
expect(
612+
new VersionRange(min: v114, max: v140).difference(
613+
new VersionConstraint.unionOf(
614+
[v003, new VersionRange(min: v010)])),
615+
equals(VersionConstraint.empty));
616+
});
609617
});
610618

611619
test('isEmpty', () {

0 commit comments

Comments
 (0)