From 6748b39f87de76f0ad1a4a192f3ee3965a14bc71 Mon Sep 17 00:00:00 2001 From: cparsons Date: Mon, 17 Apr 2017 21:16:13 +0200 Subject: Improve DottedVersion validation for minimum_os attribute, and fix error message. RELNOTES: None. PiperOrigin-RevId: 153372617 --- .../rules/objc/MultiArchSplitTransitionProvider.java | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) (limited to 'src/main/java/com/google/devtools/build/lib/rules/objc') 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 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)); } } } -- cgit v1.2.3