diff --git a/CHANGELOG.md b/CHANGELOG.md
index 4183252..40f7c3e 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,8 @@
+# 1.4.4
+
+- Fix a bug of `VersionRange.union` where ranges bounded at infinity would get
+  combined wrongly.
+
 # 1.4.3
 
 - Update Dart SDK constraint to `>=2.0.0 <3.0.0`.
diff --git a/lib/src/version_range.dart b/lib/src/version_range.dart
index 2c40884..78cd6d0 100644
--- a/lib/src/version_range.dart
+++ b/lib/src/version_range.dart
@@ -243,8 +243,10 @@
     if (other is VersionRange) {
       // If the two ranges don't overlap, we won't be able to create a single
       // VersionRange for both of them.
-      var edgesTouch = (max == other.min && (includeMax || other.includeMin)) ||
-          (min == other.max && (includeMin || other.includeMax));
+      var edgesTouch = (max != null &&
+              max == other.min &&
+              (includeMax || other.includeMin)) ||
+          (min != null && min == other.max && (includeMin || other.includeMax));
       if (!edgesTouch && !allowsAny(other)) {
         return VersionConstraint.unionOf([this, other]);
       }
diff --git a/pubspec.yaml b/pubspec.yaml
index e2ac3b0..a2238d2 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,5 +1,5 @@
 name: pub_semver
-version: 1.4.3
+version: 1.4.4
 
 description: >-
  Versions and version constraints implementing pub's versioning policy. This
diff --git a/test/version_range_test.dart b/test/version_range_test.dart
index bf280c2..67c7f35 100644
--- a/test/version_range_test.dart
+++ b/test/version_range_test.dart
@@ -562,6 +562,29 @@
       expect(result, allows(v140));
     });
 
+    test('returns a VersionUnion for a disjoint range with infinite end', () {
+      void isVersionUnion(VersionConstraint constraint) {
+        expect(constraint, allows(v080));
+        expect(constraint, doesNotAllow(v123));
+        expect(constraint, allows(v140));
+      }
+
+      for (final includeAMin in [true, false]) {
+        for (final includeAMax in [true, false]) {
+          for (final includeBMin in [true, false]) {
+            for (final includeBMax in [true, false]) {
+              final a = VersionRange(
+                  min: v130, includeMin: includeAMin, includeMax: includeAMax);
+              final b = VersionRange(
+                  max: v114, includeMin: includeBMin, includeMax: includeBMax);
+              isVersionUnion(a.union(b));
+              isVersionUnion(b.union(a));
+            }
+          }
+        }
+      }
+    });
+
     test('considers open ranges disjoint', () {
       var result = VersionRange(min: v003, max: v114)
           .union(VersionRange(min: v114, max: v200));
