Avoid possibility of the default Locale interfering with lower-casing input.
Instead of String.toLowerCase(), leverage Guava's Ascii.toLowerCase().
Also, factor out common text representations of enabled/disabled values for
boolean and tri-state flags, and simplify corresponding implementations.
https://help.semmle.com/wiki/pages/viewpage.action?pageId=29393598
https://www.w3.org/International/wiki/Case_folding
RELNOTES: none
PiperOrigin-RevId: 318499276
diff --git a/src/main/java/com/google/devtools/common/options/Converters.java b/src/main/java/com/google/devtools/common/options/Converters.java
index e6884fd..10bd836 100644
--- a/src/main/java/com/google/devtools/common/options/Converters.java
+++ b/src/main/java/com/google/devtools/common/options/Converters.java
@@ -13,6 +13,7 @@
// limitations under the License.
package com.google.devtools.common.options;
+import com.google.common.base.Ascii;
import com.google.common.base.Splitter;
import com.google.common.base.Strings;
import com.google.common.cache.CacheBuilderSpec;
@@ -31,6 +32,12 @@
/** Some convenient converters used by blaze. Note: These are specific to blaze. */
public final class Converters {
+ private static final ImmutableList<String> ENABLED_REPS =
+ ImmutableList.of("true", "1", "yes", "t", "y");
+
+ private static final ImmutableList<String> DISABLED_REPS =
+ ImmutableList.of("false", "0", "no", "f", "n");
+
/** Standard converter for booleans. Accepts common shorthands/synonyms. */
public static class BooleanConverter implements Converter<Boolean> {
@Override
@@ -38,19 +45,11 @@
if (input == null) {
return false;
}
- input = input.toLowerCase();
- if (input.equals("true")
- || input.equals("1")
- || input.equals("yes")
- || input.equals("t")
- || input.equals("y")) {
+ input = Ascii.toLowerCase(input);
+ if (ENABLED_REPS.contains(input)) {
return true;
}
- if (input.equals("false")
- || input.equals("0")
- || input.equals("no")
- || input.equals("f")
- || input.equals("n")) {
+ if (DISABLED_REPS.contains(input)) {
return false;
}
throw new OptionsParsingException("'" + input + "' is not a boolean");
@@ -133,22 +132,14 @@
if (input == null) {
return TriState.AUTO;
}
- input = input.toLowerCase();
+ input = Ascii.toLowerCase(input);
if (input.equals("auto")) {
return TriState.AUTO;
}
- if (input.equals("true")
- || input.equals("1")
- || input.equals("yes")
- || input.equals("t")
- || input.equals("y")) {
+ if (ENABLED_REPS.contains(input)) {
return TriState.YES;
}
- if (input.equals("false")
- || input.equals("0")
- || input.equals("no")
- || input.equals("f")
- || input.equals("n")) {
+ if (DISABLED_REPS.contains(input)) {
return TriState.NO;
}
throw new OptionsParsingException("'" + input + "' is not a boolean");