You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by us...@apache.org on 2013/09/13 10:37:10 UTC
svn commit: r1522813 -
/lucene/dev/branches/lucene5207/lucene/expressions/src/java/org/apache/lucene/expressions/js/JavascriptFunction.java
Author: uschindler
Date: Fri Sep 13 08:37:10 2013
New Revision: 1522813
URL: http://svn.apache.org/r1522813
Log:
LUCENE-5207: More strict checks for invalid method signatures (currently only double is accepted as parameter or return type). The method must be static, too.
Modified:
lucene/dev/branches/lucene5207/lucene/expressions/src/java/org/apache/lucene/expressions/js/JavascriptFunction.java
Modified: lucene/dev/branches/lucene5207/lucene/expressions/src/java/org/apache/lucene/expressions/js/JavascriptFunction.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5207/lucene/expressions/src/java/org/apache/lucene/expressions/js/JavascriptFunction.java?rev=1522813&r1=1522812&r2=1522813&view=diff
==============================================================================
--- lucene/dev/branches/lucene5207/lucene/expressions/src/java/org/apache/lucene/expressions/js/JavascriptFunction.java (original)
+++ lucene/dev/branches/lucene5207/lucene/expressions/src/java/org/apache/lucene/expressions/js/JavascriptFunction.java Fri Sep 13 08:37:10 2013
@@ -19,6 +19,7 @@ package org.apache.lucene.expressions.js
import java.util.HashMap;
import java.util.Map;
import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
import org.apache.lucene.util.MathUtil;
import org.objectweb.asm.Type;
@@ -86,8 +87,23 @@ class JavascriptFunction {
public final String signature;
private JavascriptFunction(String call, Method method) {
+ // do some checks if the signature is "compatible":
+ if (!Modifier.isStatic(method.getModifiers())) {
+ throw new Error(method + " is not static.");
+ }
+ if (method.getReturnType() != double.class) {
+ throw new Error(method + " does not return a double.");
+ }
+
+ final Class<?>[] paramTypes = method.getParameterTypes();
+ for (final Class<?> paramType : paramTypes) {
+ if (paramType != double.class) {
+ throw new Error(method + " may only take parameters of type 'double'.");
+ }
+ }
+
this.call = call;
- this.arguments = method.getParameterTypes().length;
+ this.arguments = paramTypes.length;
this.klass = Type.getInternalName(method.getDeclaringClass());
this.method = method.getName();
this.signature = Type.getMethodDescriptor(method);