From 32b61cb7242c707329d032d1a5b2baef44591cb9 Mon Sep 17 00:00:00 2001 From: shuailung Date: Wed, 28 Feb 2024 14:54:54 +0800 Subject: [PATCH] fix npe for bigint/double/long function fix null pointer execepiton for bigint double and long function --- .../function/system/BigIntFunction.java | 2 +- .../function/system/DoubleFunction.java | 2 +- .../runtime/function/system/LongFunction.java | 2 +- .../system/BigIntFunctionUnitTest.java | 27 +++++++++++++++++++ .../system/DoubleFunctionUnitTest.java | 27 +++++++++++++++++++ .../function/system/LongFunctionUnitTest.java | 27 +++++++++++++++++++ 6 files changed, 84 insertions(+), 3 deletions(-) create mode 100644 src/test/java/com/googlecode/aviator/runtime/function/system/BigIntFunctionUnitTest.java create mode 100644 src/test/java/com/googlecode/aviator/runtime/function/system/DoubleFunctionUnitTest.java create mode 100644 src/test/java/com/googlecode/aviator/runtime/function/system/LongFunctionUnitTest.java diff --git a/src/main/java/com/googlecode/aviator/runtime/function/system/BigIntFunction.java b/src/main/java/com/googlecode/aviator/runtime/function/system/BigIntFunction.java index aee6d8e4..e3b5b015 100644 --- a/src/main/java/com/googlecode/aviator/runtime/function/system/BigIntFunction.java +++ b/src/main/java/com/googlecode/aviator/runtime/function/system/BigIntFunction.java @@ -36,7 +36,7 @@ public AviatorObject call(final Map env, final AviatorObject arg } else if (obj instanceof Character) { return AviatorBigInt.valueOf(new BigInteger(String.valueOf(obj))); } else { - throw new ClassCastException("Could not cast " + obj.getClass().getName() + " to bigint"); + throw new ClassCastException("Could not cast " + (obj != null ? obj.getClass().getName() : "null") + " to bigint, AviatorObject is " + arg1); } case String: return AviatorBigInt.valueOf(new BigInteger((String) arg1.getValue(env))); diff --git a/src/main/java/com/googlecode/aviator/runtime/function/system/DoubleFunction.java b/src/main/java/com/googlecode/aviator/runtime/function/system/DoubleFunction.java index 50e5b025..0a44f73c 100644 --- a/src/main/java/com/googlecode/aviator/runtime/function/system/DoubleFunction.java +++ b/src/main/java/com/googlecode/aviator/runtime/function/system/DoubleFunction.java @@ -34,7 +34,7 @@ public AviatorObject call(Map env, AviatorObject arg1) { } else if (obj instanceof Character) { return new AviatorDouble(Double.parseDouble(String.valueOf(obj))); } else { - throw new ClassCastException("Could not cast " + obj.getClass().getName() + " to double"); + throw new ClassCastException("Could not cast " + (obj != null ? obj.getClass().getName() : "null") + " to double, AviatorObject is" + arg1 ); } case String: return new AviatorDouble(Double.parseDouble((String) arg1.getValue(env))); diff --git a/src/main/java/com/googlecode/aviator/runtime/function/system/LongFunction.java b/src/main/java/com/googlecode/aviator/runtime/function/system/LongFunction.java index 5b30aa7e..07ff6fd6 100644 --- a/src/main/java/com/googlecode/aviator/runtime/function/system/LongFunction.java +++ b/src/main/java/com/googlecode/aviator/runtime/function/system/LongFunction.java @@ -34,7 +34,7 @@ public AviatorObject call(Map env, AviatorObject arg1) { } else if (obj instanceof Character) { return AviatorLong.valueOf(Long.valueOf(String.valueOf(obj))); } else { - throw new ClassCastException("Could not cast " + obj.getClass().getName() + " to long"); + throw new ClassCastException("Could not cast " + (obj != null ? obj.getClass().getName() : "null") + " to long, AviatorObject is " + arg1); } case String: return AviatorLong.valueOf(Long.valueOf((String) arg1.getValue(env))); diff --git a/src/test/java/com/googlecode/aviator/runtime/function/system/BigIntFunctionUnitTest.java b/src/test/java/com/googlecode/aviator/runtime/function/system/BigIntFunctionUnitTest.java new file mode 100644 index 00000000..ecf2e382 --- /dev/null +++ b/src/test/java/com/googlecode/aviator/runtime/function/system/BigIntFunctionUnitTest.java @@ -0,0 +1,27 @@ +package com.googlecode.aviator.runtime.function.system; + +import com.googlecode.aviator.runtime.type.AviatorJavaType; +import org.junit.Test; + +import java.util.HashMap; +import java.util.Map; + + +public class BigIntFunctionUnitTest { + @Test(expected = ClassCastException.class) + public void testCall_WithJavaTypeNullArgument() { + BigIntFunction bigIntFunction = new BigIntFunction(); + AviatorJavaType aviatorJavaType = new AviatorJavaType("var"); + bigIntFunction.call(null, aviatorJavaType); + } + + @Test(expected = ClassCastException.class) + public void testCall_WithJavaTypeNotSupportArgument() { + BigIntFunction bigIntFunction = new BigIntFunction(); + AviatorJavaType aviatorJavaType = new AviatorJavaType("var"); + Map env = new HashMap<>(); + env.put("var", true); + + bigIntFunction.call(env, aviatorJavaType); + } +} diff --git a/src/test/java/com/googlecode/aviator/runtime/function/system/DoubleFunctionUnitTest.java b/src/test/java/com/googlecode/aviator/runtime/function/system/DoubleFunctionUnitTest.java new file mode 100644 index 00000000..2c153ae7 --- /dev/null +++ b/src/test/java/com/googlecode/aviator/runtime/function/system/DoubleFunctionUnitTest.java @@ -0,0 +1,27 @@ +package com.googlecode.aviator.runtime.function.system; + +import com.googlecode.aviator.runtime.type.AviatorJavaType; +import org.junit.Test; + +import java.util.HashMap; +import java.util.Map; + + +public class DoubleFunctionUnitTest { + @Test(expected = ClassCastException.class) + public void testCall_WithJavaTypeNullArgument() { + DoubleFunction doubleFunction = new DoubleFunction(); + AviatorJavaType aviatorJavaType = new AviatorJavaType("var"); + doubleFunction.call(null, aviatorJavaType); + } + + @Test(expected = ClassCastException.class) + public void testCall_WithJavaTypeNotSupportArgument() { + DoubleFunction doubleFunction = new DoubleFunction(); + AviatorJavaType aviatorJavaType = new AviatorJavaType("var"); + Map env = new HashMap<>(); + env.put("var", true); + + doubleFunction.call(env, aviatorJavaType); + } +} diff --git a/src/test/java/com/googlecode/aviator/runtime/function/system/LongFunctionUnitTest.java b/src/test/java/com/googlecode/aviator/runtime/function/system/LongFunctionUnitTest.java new file mode 100644 index 00000000..106f22ed --- /dev/null +++ b/src/test/java/com/googlecode/aviator/runtime/function/system/LongFunctionUnitTest.java @@ -0,0 +1,27 @@ +package com.googlecode.aviator.runtime.function.system; + +import com.googlecode.aviator.runtime.type.AviatorJavaType; +import org.junit.Test; + +import java.util.HashMap; +import java.util.Map; + + +public class LongFunctionUnitTest { + @Test(expected = ClassCastException.class) + public void testCall_WithJavaTypeNullArgument() { + LongFunction longFunction = new LongFunction(); + AviatorJavaType aviatorJavaType = new AviatorJavaType("var"); + longFunction.call(null, aviatorJavaType); + } + + @Test(expected = ClassCastException.class) + public void testCall_WithJavaTypeNotSupportArgument() { + LongFunction longFunction = new LongFunction(); + AviatorJavaType aviatorJavaType = new AviatorJavaType("var"); + Map env = new HashMap<>(); + env.put("var", true); + + longFunction.call(env, aviatorJavaType); + } +}