From 9f8371e77c8cf99d52db66a9f991b4776c47dea3 Mon Sep 17 00:00:00 2001 From: Lauri Tulmin Date: Thu, 22 Apr 2021 05:24:13 +0300 Subject: [PATCH] Use locale insensitive lower/upper case conversion (#2838) --- .../instrumentation/api/config/NamingConvention.java | 6 ++++-- .../instrumentation/api/db/RedisCommandSanitizer.java | 5 ++++- instrumentation-api/src/main/jflex/SqlSanitizer.flex | 2 +- .../instrumentation/awslambda/v1_0/MapUtils.java | 3 ++- .../awslambda/v1_0/ParentContextExtractor.java | 3 ++- .../instrumentation/awssdk/v2_2/MethodHandleFactory.java | 3 ++- .../instrumentation/jdbc/JdbcConnectionUrlParser.java | 3 ++- .../opentelemetry/javaagent/tooling/LoggingConfigurer.java | 4 +++- 8 files changed, 20 insertions(+), 9 deletions(-) diff --git a/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/config/NamingConvention.java b/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/config/NamingConvention.java index 7022361322..32b19e6dce 100644 --- a/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/config/NamingConvention.java +++ b/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/config/NamingConvention.java @@ -5,19 +5,21 @@ package io.opentelemetry.instrumentation.api.config; +import java.util.Locale; + // config property names are normalized to underscore separated lowercase words enum NamingConvention { DOT { @Override public String normalize(String key) { // many instrumentation names have dashes ('-') - return key.toLowerCase().replace('-', '.'); + return key.toLowerCase(Locale.ROOT).replace('-', '.'); } }, ENV_VAR { @Override public String normalize(String key) { - return key.toLowerCase().replace('_', '.'); + return key.toLowerCase(Locale.ROOT).replace('_', '.'); } }; diff --git a/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/db/RedisCommandSanitizer.java b/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/db/RedisCommandSanitizer.java index f86866897c..bbf39f5ff0 100644 --- a/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/db/RedisCommandSanitizer.java +++ b/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/db/RedisCommandSanitizer.java @@ -15,6 +15,7 @@ import io.opentelemetry.instrumentation.api.db.RedisCommandSanitizer.CommandSani import java.nio.charset.StandardCharsets; import java.util.HashMap; import java.util.List; +import java.util.Locale; import java.util.Map; /** @@ -316,7 +317,9 @@ public final class RedisCommandSanitizer { if (!StatementSanitizationConfig.isStatementSanitizationEnabled()) { return KeepAllArgs.INSTANCE.sanitize(command, args); } - return SANITIZERS.getOrDefault(command.toUpperCase(), DEFAULT).sanitize(command, args); + return SANITIZERS + .getOrDefault(command.toUpperCase(Locale.ROOT), DEFAULT) + .sanitize(command, args); } public interface CommandSanitizer { diff --git a/instrumentation-api/src/main/jflex/SqlSanitizer.flex b/instrumentation-api/src/main/jflex/SqlSanitizer.flex index d6fa73efe2..618385c885 100644 --- a/instrumentation-api/src/main/jflex/SqlSanitizer.flex +++ b/instrumentation-api/src/main/jflex/SqlSanitizer.flex @@ -107,7 +107,7 @@ WHITESPACE = [ \t\r\n]+ } SqlStatementInfo getResult(String fullStatement) { - return SqlStatementInfo.create(fullStatement, getClass().getSimpleName().toUpperCase(), mainTable); + return SqlStatementInfo.create(fullStatement, getClass().getSimpleName().toUpperCase(java.util.Locale.ROOT), mainTable); } } diff --git a/instrumentation/aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/MapUtils.java b/instrumentation/aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/MapUtils.java index f30e72017e..190746d5e0 100644 --- a/instrumentation/aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/MapUtils.java +++ b/instrumentation/aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/MapUtils.java @@ -6,6 +6,7 @@ package io.opentelemetry.instrumentation.awslambda.v1_0; import java.util.Collections; +import java.util.Locale; import java.util.Map; import java.util.stream.Collectors; @@ -13,7 +14,7 @@ final class MapUtils { static Map lowercaseMap(Map source) { return emptyIfNull(source).entrySet().stream() .filter(e -> e.getKey() != null) - .collect(Collectors.toMap(e -> e.getKey().toLowerCase(), Map.Entry::getValue)); + .collect(Collectors.toMap(e -> e.getKey().toLowerCase(Locale.ROOT), Map.Entry::getValue)); } static Map emptyIfNull(Map map) { diff --git a/instrumentation/aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/ParentContextExtractor.java b/instrumentation/aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/ParentContextExtractor.java index b142272539..2a2ba8e77c 100644 --- a/instrumentation/aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/ParentContextExtractor.java +++ b/instrumentation/aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/ParentContextExtractor.java @@ -14,6 +14,7 @@ import io.opentelemetry.context.propagation.TextMapGetter; import io.opentelemetry.extension.aws.AwsXrayPropagator; import io.opentelemetry.instrumentation.api.tracer.BaseTracer; import java.util.Collections; +import java.util.Locale; import java.util.Map; public class ParentContextExtractor { @@ -69,7 +70,7 @@ public class ParentContextExtractor { @Override public String get(Map map, String s) { - return map.get(s.toLowerCase()); + return map.get(s.toLowerCase(Locale.ROOT)); } } } diff --git a/instrumentation/aws-sdk/aws-sdk-2.2/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/MethodHandleFactory.java b/instrumentation/aws-sdk/aws-sdk-2.2/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/MethodHandleFactory.java index 51d7d55092..2abf4d66d2 100644 --- a/instrumentation/aws-sdk/aws-sdk-2.2/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/MethodHandleFactory.java +++ b/instrumentation/aws-sdk/aws-sdk-2.2/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/MethodHandleFactory.java @@ -7,12 +7,13 @@ package io.opentelemetry.instrumentation.awssdk.v2_2; import java.lang.invoke.MethodHandle; import java.lang.invoke.MethodHandles; +import java.util.Locale; import java.util.concurrent.ConcurrentHashMap; class MethodHandleFactory { private String lowerCase(String string) { - return string.substring(0, 1).toLowerCase() + string.substring(1); + return string.substring(0, 1).toLowerCase(Locale.ROOT) + string.substring(1); } private final ClassValue> getterCache = diff --git a/instrumentation/jdbc/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jdbc/JdbcConnectionUrlParser.java b/instrumentation/jdbc/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jdbc/JdbcConnectionUrlParser.java index 21072c252e..bad2042d6f 100644 --- a/instrumentation/jdbc/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jdbc/JdbcConnectionUrlParser.java +++ b/instrumentation/jdbc/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jdbc/JdbcConnectionUrlParser.java @@ -15,6 +15,7 @@ import java.net.URLDecoder; import java.util.Collections; import java.util.HashMap; import java.util.LinkedHashMap; +import java.util.Locale; import java.util.Map; import java.util.Properties; import java.util.regex.Matcher; @@ -815,7 +816,7 @@ public enum JdbcConnectionUrlParser { return DEFAULT; } // Make this easier and ignore case. - connectionUrl = connectionUrl.toLowerCase(); + connectionUrl = connectionUrl.toLowerCase(Locale.ROOT); if (!connectionUrl.startsWith("jdbc:")) { return DEFAULT; diff --git a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/LoggingConfigurer.java b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/LoggingConfigurer.java index 6635764fe3..cba5469ac1 100644 --- a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/LoggingConfigurer.java +++ b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/LoggingConfigurer.java @@ -5,6 +5,8 @@ package io.opentelemetry.javaagent.tooling; +import java.util.Locale; + class LoggingConfigurer { private static final String SIMPLE_LOGGER_SHOW_DATE_TIME_PROPERTY = @@ -57,7 +59,7 @@ class LoggingConfigurer { } String tracerDebugLevelEnv = - System.getenv(tracerDebugLevelSysprop.replace('.', '_').toUpperCase()); + System.getenv(tracerDebugLevelSysprop.replace('.', '_').toUpperCase(Locale.ROOT)); if (tracerDebugLevelEnv != null) { return Boolean.parseBoolean(tracerDebugLevelEnv);