Affects: 5.x.x 6.x.x (not sure about older versions)

I'm using Spring Expression Language (SpEL) to allow user to specify customized data filter criteria.

As user can input any text for the criteria, I need validate the input SpEL expression. I did it with function SpelExpressionParser#parseRaw and consider ParseException as the signal of bad expression.

I found it throws IllegalArgumentException for some bad expression.

repro code:

new SpelExpressionParser().parseRaw("/^REGEX_PREFIX_/.test(myVariable)");

error log:

java.lang.IllegalArgumentException: Operand must not be null

    at org.springframework.util.Assert.notNull(Assert.java:172)
    at org.springframework.expression.spel.ast.SpelNodeImpl.<init>(SpelNodeImpl.java:80)
    at org.springframework.expression.spel.ast.Operator.<init>(Operator.java:58)
    at org.springframework.expression.spel.ast.OperatorPower.<init>(OperatorPower.java:38)
    at org.springframework.expression.spel.standard.InternalSpelExpressionParser.eatPowerIncDecExpression(InternalSpelExpressionParser.java:322)
    at org.springframework.expression.spel.standard.InternalSpelExpressionParser.eatProductExpression(InternalSpelExpressionParser.java:299)
    at org.springframework.expression.spel.standard.InternalSpelExpressionParser.eatSumExpression(InternalSpelExpressionParser.java:278)
    at org.springframework.expression.spel.standard.InternalSpelExpressionParser.eatRelationalExpression(InternalSpelExpressionParser.java:233)
    at org.springframework.expression.spel.standard.InternalSpelExpressionParser.eatLogicalAndExpression(InternalSpelExpressionParser.java:220)
    at org.springframework.expression.spel.standard.InternalSpelExpressionParser.eatLogicalOrExpression(InternalSpelExpressionParser.java:207)
    at org.springframework.expression.spel.standard.InternalSpelExpressionParser.eatExpression(InternalSpelExpressionParser.java:168)
    at org.springframework.expression.spel.standard.InternalSpelExpressionParser.doParseExpression(InternalSpelExpressionParser.java:138)
    at org.springframework.expression.spel.standard.SpelExpressionParser.doParseExpression(SpelExpressionParser.java:63)
    at org.springframework.expression.spel.standard.SpelExpressionParser.parseRaw(SpelExpressionParser.java:58)

Comment From: snicoll

Thanks for the suggestion but that's not how the SpEL parser works. I agree it would be nice if it would consistently throw a ParseException with a dedicated message that describes what the problem is and where but it would be a significant task. If you look at the spel.ast package, there are a lot of Assert calls like the one you're hitting above.