diff options
Diffstat (limited to 'src/main/java/com/google')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/apple/DottedVersion.java | 21 | ||||
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/objc/MultiArchSplitTransitionProvider.java | 17 |
2 files changed, 33 insertions, 5 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/apple/DottedVersion.java b/src/main/java/com/google/devtools/build/lib/rules/apple/DottedVersion.java index 9bdb5a8649..2a38bfeb7b 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/apple/DottedVersion.java +++ b/src/main/java/com/google/devtools/build/lib/rules/apple/DottedVersion.java @@ -188,6 +188,27 @@ public final class DottedVersion implements Comparable<DottedVersion> { return Joiner.on('.').join(stringComponents.build()); } + /** + * Returns true if this version number has any alphabetic characters, such as 'alpha' in + * "7.3alpha.2". + */ + public boolean hasAlphabeticCharacters() { + for (Component component : components) { + if (!Objects.equals(component.alphaSequence, NO_ALPHA_SEQUENCE)) { + return true; + } + } + return false; + } + + /** + * Returns the number of components in this version number. For example, "7.3.0" has three + * components. + */ + public int numComponents() { + return components.size(); + } + @Override public String toString() { return stringRepresentation; diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/MultiArchSplitTransitionProvider.java b/src/main/java/com/google/devtools/build/lib/rules/objc/MultiArchSplitTransitionProvider.java index de2c187328..5cbb4d98ed 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/MultiArchSplitTransitionProvider.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/MultiArchSplitTransitionProvider.java @@ -46,6 +46,11 @@ public class MultiArchSplitTransitionProvider implements SplitTransitionProvider static final String UNSUPPORTED_PLATFORM_TYPE_ERROR_FORMAT = "Unsupported platform type \"%s\""; + @VisibleForTesting + static final String INVALID_VERSION_STRING_ERROR_FORMAT = + "Invalid version string \"%s\". Version must be of the form 'x.y' without alphabetic " + + "characters, such as '4.3'."; + private static final ImmutableSet<PlatformType> SUPPORTED_PLATFORM_TYPES = ImmutableSet.of( PlatformType.IOS, PlatformType.WATCHOS, PlatformType.TVOS, PlatformType.MACOS); @@ -79,12 +84,14 @@ public class MultiArchSplitTransitionProvider implements SplitTransitionProvider // TODO(b/37096178): This should be a mandatory attribute. if (!Strings.isNullOrEmpty(attributeValue)) { try { - // TODO(cparsons): Do more rigorous validation. For example, "8.2beta.3" is invalid, but - // will pass this validation. - DottedVersion.fromString(attributeValue); + DottedVersion minimumOsVersion = DottedVersion.fromString(attributeValue); + if (minimumOsVersion.hasAlphabeticCharacters() || minimumOsVersion.numComponents() > 2) { + throw ruleContext.throwWithAttributeError(MultiArchPlatformRule.MINIMUM_OS_VERSION, + String.format(INVALID_VERSION_STRING_ERROR_FORMAT, attributeValue)); + } } catch (IllegalArgumentException exception) { - throw ruleContext.throwWithAttributeError(MultiArchPlatformRule.PLATFORM_TYPE_ATTR_NAME, - String.format(UNSUPPORTED_PLATFORM_TYPE_ERROR_FORMAT, attributeValue)); + throw ruleContext.throwWithAttributeError(MultiArchPlatformRule.MINIMUM_OS_VERSION, + String.format(INVALID_VERSION_STRING_ERROR_FORMAT, attributeValue)); } } } |