From 3b525e05fe8cb220dc4e8e1da250dc999c102077 Mon Sep 17 00:00:00 2001 From: kiki Date: Mon, 13 Jan 2014 15:00:30 +0800 Subject: [PATCH] improve sql wall --- .../java/com/alibaba/druid/sql/parser/SQLExprParser.java | 5 +++-- .../alibaba/druid/bvt/filter/wall/MySqlWallTest91.java | 8 ++++++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/alibaba/druid/sql/parser/SQLExprParser.java b/src/main/java/com/alibaba/druid/sql/parser/SQLExprParser.java index 0d4c9ec3ca..a00d77ed52 100644 --- a/src/main/java/com/alibaba/druid/sql/parser/SQLExprParser.java +++ b/src/main/java/com/alibaba/druid/sql/parser/SQLExprParser.java @@ -1005,11 +1005,12 @@ public class SQLExprParser extends SQLParser { SQLInListExpr inListExpr = new SQLInListExpr(expr); if (lexer.token() == Token.LPAREN) { lexer.nextToken(); - exprList(inListExpr.getTargetList()); + exprList(inListExpr.getTargetList(), inListExpr); accept(Token.RPAREN); expr = inListExpr; } else { SQLExpr itemExpr = primary(); + itemExpr.setParent(inListExpr); inListExpr.getTargetList().add(itemExpr); } @@ -1259,7 +1260,7 @@ public class SQLExprParser extends SQLParser { accept(Token.LPAREN); SQLInListExpr inListExpr = new SQLInListExpr(expr, true); - exprList(inListExpr.getTargetList()); + exprList(inListExpr.getTargetList(), inListExpr); expr = inListExpr; accept(Token.RPAREN); diff --git a/src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest91.java b/src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest91.java index 37475e1942..81acb76c06 100644 --- a/src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest91.java +++ b/src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest91.java @@ -119,6 +119,14 @@ public class MySqlWallTest91 extends TestCase { } } + public void test_false10() { + WallProvider provider = initWallProvider(); + { + String sql = "select count(*) from messages a where a.id in (2 and 1 AND 9881=IF((ORD(MID((IFNULL(CAST(DATABASE() AS CHAR),0x20)),6,1))>117),SLEEP(5),9881)) and a.message <> 'hello' and a.message like 'Little'"; + Assert.assertFalse(provider.checkValid(sql)); + } + } + public void test_true1() throws Exception { WallProvider provider = initWallProvider(); {