aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/apache/commons/lang3/SystemUtils.java
diff options
context:
space:
mode:
authorBenedikt Ritter <britter@apache.org>2015-03-28 12:08:17 +0000
committerBenedikt Ritter <britter@apache.org>2015-03-28 12:08:17 +0000
commit11c0df1d9ec508e4ae502c1b951907640a5c4804 (patch)
tree980eb6494a5b4bb412fd66e72ff9d9e403aa3136 /src/main/java/org/apache/commons/lang3/SystemUtils.java
parent1dc65ff986126f5e460e5347638d735fdc8cf52a (diff)
downloadapache-commons-lang-11c0df1d9ec508e4ae502c1b951907640a5c4804.tar.gz
LANG-1102: Make logic for comparing OS versions in SystemUtils smarter
git-svn-id: https://svn.apache.org/repos/asf/commons/proper/lang/trunk@1669750 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'src/main/java/org/apache/commons/lang3/SystemUtils.java')
-rw-r--r--src/main/java/org/apache/commons/lang3/SystemUtils.java28
1 files changed, 27 insertions, 1 deletions
diff --git a/src/main/java/org/apache/commons/lang3/SystemUtils.java b/src/main/java/org/apache/commons/lang3/SystemUtils.java
index 6508ddcbf..ba99a4ae0 100644
--- a/src/main/java/org/apache/commons/lang3/SystemUtils.java
+++ b/src/main/java/org/apache/commons/lang3/SystemUtils.java
@@ -1448,7 +1448,7 @@ public class SystemUtils {
if (osName == null || osVersion == null) {
return false;
}
- return isOSNameMatch(osName, osNamePrefix) && osVersion.startsWith(osVersionPrefix);
+ return isOSNameMatch(osName, osNamePrefix) && isOSVersionMatch(osVersion, osVersionPrefix);
}
/**
@@ -1467,6 +1467,32 @@ public class SystemUtils {
}
return osName.startsWith(osNamePrefix);
}
+
+ /**
+ * Decides if the operating system version matches.
+ * <p>
+ * This method is package private instead of private to support unit test invocation.
+ * </p>
+ *
+ * @param osVersion the actual OS version
+ * @param osVersionPrefix the prefix for the expected OS version
+ * @return true if matches, or false if not or can't determine
+ */
+ static boolean isOSVersionMatch(final String osVersion, final String osVersionPrefix) {
+ if (StringUtils.isEmpty(osVersion)) {
+ return false;
+ }
+ // Compare parts of the version string instead of using String.startsWith(String) because otherwise
+ // osVersionPrefix 10.1 would also match osVersion 10.10
+ String[] versionPrefixParts = osVersionPrefix.split("\\.");
+ String[] versionParts = osVersion.split("\\.");
+ for (int i = 0; i < Math.min(versionPrefixParts.length, versionParts.length); i++) {
+ if (!versionPrefixParts[i].equals(versionParts[i])) {
+ return false;
+ }
+ }
+ return true;
+ }
// -----------------------------------------------------------------------
/**