diff options
author | Benedikt Ritter <britter@apache.org> | 2015-03-28 12:08:17 +0000 |
---|---|---|
committer | Benedikt Ritter <britter@apache.org> | 2015-03-28 12:08:17 +0000 |
commit | 11c0df1d9ec508e4ae502c1b951907640a5c4804 (patch) | |
tree | 980eb6494a5b4bb412fd66e72ff9d9e403aa3136 /src/main/java/org/apache/commons/lang3/SystemUtils.java | |
parent | 1dc65ff986126f5e460e5347638d735fdc8cf52a (diff) | |
download | apache-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.java | 28 |
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; + } // ----------------------------------------------------------------------- /** |