X-Git-Url: http://git.liburcu.org/?a=blobdiff_plain;f=liblttng-ust-java-agent%2Fjava%2Flttng-ust-agent-common%2Forg%2Flttng%2Fust%2Fagent%2Fcontext%2FContextInfoManager.java;h=86ded59b346ab6984ca4594826d4d9f5716cb5d4;hb=14ba880b03565b199d55671b3c6e476e2373d19e;hp=c3999b5d83883637be881352e9359a898b7fbcee;hpb=a9299d47744dac7a17940f93d478894e9da4788b;p=lttng-ust.git diff --git a/liblttng-ust-java-agent/java/lttng-ust-agent-common/org/lttng/ust/agent/context/ContextInfoManager.java b/liblttng-ust-java-agent/java/lttng-ust-agent-common/org/lttng/ust/agent/context/ContextInfoManager.java index c3999b5d..86ded59b 100644 --- a/liblttng-ust-java-agent/java/lttng-ust-agent-common/org/lttng/ust/agent/context/ContextInfoManager.java +++ b/liblttng-ust-java-agent/java/lttng-ust-agent-common/org/lttng/ust/agent/context/ContextInfoManager.java @@ -21,6 +21,8 @@ import java.io.IOException; import java.util.HashMap; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; +import java.util.regex.Matcher; +import java.util.regex.Pattern; /** * The singleton manager of {@link IContextInfoRetriever} objects. @@ -31,6 +33,8 @@ public final class ContextInfoManager { private static final String SHARED_LIBRARY_NAME = "lttng-ust-context-jni"; + private static final Pattern VALID_CONTEXT_NAME_PATTERN = Pattern.compile("^[a-zA-Z0-9_\\.]+$"); + private static ContextInfoManager instance; private final Map contextInfoRetrievers = new ConcurrentHashMap(); @@ -95,6 +99,10 @@ public final class ContextInfoManager { */ public boolean registerContextInfoRetriever(String retrieverName, IContextInfoRetriever contextInfoRetriever) { synchronized (retrieverLock) { + if (!validateRetrieverName(retrieverName)) { + return false; + } + if (contextInfoRetrievers.containsKey(retrieverName)) { /* * There is already a retriever registered with that name, @@ -157,4 +165,24 @@ public final class ContextInfoManager { public IContextInfoRetriever getContextInfoRetriever(String retrieverName) { return contextInfoRetrievers.get(retrieverName); } + + /** + * Validate that the given retriever name contains only the allowed + * characters, which are alphanumerical characters, period "." and + * underscore "_". The name must also not start with a number. + */ + private static boolean validateRetrieverName(String contextName) { + if (contextName.isEmpty()) { + return false; + } + + /* First character must not be a number */ + if (Character.isDigit(contextName.charAt(0))) { + return false; + } + + /* Validate the other characters of the string */ + Matcher matcher = VALID_CONTEXT_NAME_PATTERN.matcher(contextName); + return matcher.matches(); + } }