Skip to content

Commit

Permalink
Painless: Special Case def (#32871)
Browse files Browse the repository at this point in the history
This removes def from the classes map in PainlessLookup and instead always special 
cases it. This prevents potential calls against the def type that shouldn't be made and 
forces all cases of def throughout Painless code to be special cased.
  • Loading branch information
jdconrad authored and jimczi committed Aug 17, 2018
1 parent e657402 commit 9b73dda
Show file tree
Hide file tree
Showing 4 changed files with 7 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@

import org.elasticsearch.painless.lookup.PainlessLookup;
import org.elasticsearch.painless.lookup.PainlessLookupUtility;
import org.elasticsearch.painless.lookup.def;

import java.lang.invoke.MethodType;
import java.lang.reflect.Field;
Expand Down Expand Up @@ -190,7 +191,7 @@ private static Class<?> definitionTypeForClass(PainlessLookup painlessLookup, Cl
componentType = componentType.getComponentType();
}

if (painlessLookup.lookupPainlessClass(componentType) == null) {
if (componentType != def.class && painlessLookup.lookupPainlessClass(componentType) == null) {
throw new IllegalArgumentException(unknownErrorMessageSource.apply(componentType));
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
import java.util.Set;
import java.util.function.Function;

import static org.elasticsearch.painless.lookup.PainlessLookupUtility.DEF_CLASS_NAME;
import static org.elasticsearch.painless.lookup.PainlessLookupUtility.buildPainlessConstructorKey;
import static org.elasticsearch.painless.lookup.PainlessLookupUtility.buildPainlessFieldKey;
import static org.elasticsearch.painless.lookup.PainlessLookupUtility.buildPainlessMethodKey;
Expand All @@ -47,7 +48,7 @@ public final class PainlessLookup {
public boolean isValidCanonicalClassName(String canonicalClassName) {
Objects.requireNonNull(canonicalClassName);

return canonicalClassNamesToClasses.containsKey(canonicalClassName);
return DEF_CLASS_NAME.equals(canonicalClassName) || canonicalClassNamesToClasses.containsKey(canonicalClassName);
}

public Class<?> canonicalTypeNameToType(String canonicalTypeName) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -211,9 +211,6 @@ public static PainlessLookup buildFromWhitelists(List<Whitelist> whitelists) {
public PainlessLookupBuilder() {
canonicalClassNamesToClasses = new HashMap<>();
classesToPainlessClassBuilders = new HashMap<>();

canonicalClassNamesToClasses.put(DEF_CLASS_NAME, def.class);
classesToPainlessClassBuilders.put(def.class, new PainlessClassBuilder());
}

private Class<?> canonicalTypeNameToType(String canonicalTypeName) {
Expand All @@ -225,7 +222,7 @@ private boolean isValidType(Class<?> type) {
type = type.getComponentType();
}

return classesToPainlessClassBuilders.containsKey(type);
return type == def.class || classesToPainlessClassBuilders.containsKey(type);
}

public void addPainlessClass(ClassLoader classLoader, String javaClassName, boolean importClassName) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ public static Class<?> canonicalTypeNameToType(String canonicalTypeName, Map<Str
Objects.requireNonNull(canonicalTypeName);
Objects.requireNonNull(canonicalClassNamesToClasses);

Class<?> type = canonicalClassNamesToClasses.get(canonicalTypeName);
Class<?> type = DEF_CLASS_NAME.equals(canonicalTypeName) ? def.class : canonicalClassNamesToClasses.get(canonicalTypeName);

if (type != null) {
return type;
Expand All @@ -105,7 +105,7 @@ public static Class<?> canonicalTypeNameToType(String canonicalTypeName, Map<Str
}

canonicalTypeName = canonicalTypeName.substring(0, canonicalTypeName.indexOf('['));
type = canonicalClassNamesToClasses.get(canonicalTypeName);
type = DEF_CLASS_NAME.equals(canonicalTypeName) ? def.class : canonicalClassNamesToClasses.get(canonicalTypeName);

if (type != null) {
char arrayBraces[] = new char[arrayDimensions];
Expand Down

0 comments on commit 9b73dda

Please sign in to comment.