diff --git a/src/main/java/com/alibaba/druid/sql/ast/expr/SQLBinaryOperator.java b/src/main/java/com/alibaba/druid/sql/ast/expr/SQLBinaryOperator.java index b371006492..b3826aca2e 100644 --- a/src/main/java/com/alibaba/druid/sql/ast/expr/SQLBinaryOperator.java +++ b/src/main/java/com/alibaba/druid/sql/ast/expr/SQLBinaryOperator.java @@ -38,7 +38,6 @@ public enum SQLBinaryOperator { BitwiseAnd("&", 90), BitwiseOr("|", 100), - InvertBits("~", 100), GreaterThan(">", 110), GreaterThanOrEqual(">=", 110), diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlEvalVisitorImpl.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlEvalVisitorImpl.java index 78f3dacbfc..86a33a7c2f 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlEvalVisitorImpl.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlEvalVisitorImpl.java @@ -28,6 +28,7 @@ import com.alibaba.druid.sql.ast.expr.SQLMethodInvokeExpr; import com.alibaba.druid.sql.ast.expr.SQLNullExpr; import com.alibaba.druid.sql.ast.expr.SQLNumberExpr; import com.alibaba.druid.sql.ast.expr.SQLQueryExpr; +import com.alibaba.druid.sql.ast.expr.SQLUnaryExpr; import com.alibaba.druid.sql.ast.expr.SQLVariantRefExpr; import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlBooleanExpr; import com.alibaba.druid.sql.visitor.SQLEvalVisitor; @@ -76,6 +77,10 @@ public class MySqlEvalVisitorImpl extends MySqlASTVisitorAdapter implements SQLE public boolean visit(SQLBinaryOpExpr x) { return SQLEvalVisitorUtils.visit(this, x); } + + public boolean visit(SQLUnaryExpr x) { + return SQLEvalVisitorUtils.visit(this, x); + } public boolean visit(SQLIntegerExpr x) { return SQLEvalVisitorUtils.visit(this, x); diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleEvalVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleEvalVisitor.java index a7f62b49b5..dfa16a1b07 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleEvalVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleEvalVisitor.java @@ -27,6 +27,7 @@ import com.alibaba.druid.sql.ast.expr.SQLMethodInvokeExpr; import com.alibaba.druid.sql.ast.expr.SQLNullExpr; import com.alibaba.druid.sql.ast.expr.SQLNumberExpr; import com.alibaba.druid.sql.ast.expr.SQLQueryExpr; +import com.alibaba.druid.sql.ast.expr.SQLUnaryExpr; import com.alibaba.druid.sql.ast.expr.SQLVariantRefExpr; import com.alibaba.druid.sql.visitor.SQLEvalVisitor; import com.alibaba.druid.sql.visitor.SQLEvalVisitorUtils; @@ -74,6 +75,10 @@ public class OracleEvalVisitor extends OracleASTVisitorAdapter implements SQLEva public boolean visit(SQLBinaryOpExpr x) { return SQLEvalVisitorUtils.visit(this, x); } + + public boolean visit(SQLUnaryExpr x) { + return SQLEvalVisitorUtils.visit(this, x); + } public boolean visit(SQLIntegerExpr x) { return SQLEvalVisitorUtils.visit(this, x); diff --git a/src/main/java/com/alibaba/druid/sql/dialect/postgresql/visitor/PGEvalVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/postgresql/visitor/PGEvalVisitor.java index 6e590d4b84..721c0e7326 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/postgresql/visitor/PGEvalVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/postgresql/visitor/PGEvalVisitor.java @@ -27,6 +27,7 @@ import com.alibaba.druid.sql.ast.expr.SQLMethodInvokeExpr; import com.alibaba.druid.sql.ast.expr.SQLNullExpr; import com.alibaba.druid.sql.ast.expr.SQLNumberExpr; import com.alibaba.druid.sql.ast.expr.SQLQueryExpr; +import com.alibaba.druid.sql.ast.expr.SQLUnaryExpr; import com.alibaba.druid.sql.ast.expr.SQLVariantRefExpr; import com.alibaba.druid.sql.visitor.SQLEvalVisitor; import com.alibaba.druid.sql.visitor.SQLEvalVisitorUtils; @@ -74,6 +75,10 @@ public class PGEvalVisitor extends PGASTVisitorAdapter implements SQLEvalVisitor public boolean visit(SQLBinaryOpExpr x) { return SQLEvalVisitorUtils.visit(this, x); } + + public boolean visit(SQLUnaryExpr x) { + return SQLEvalVisitorUtils.visit(this, x); + } public boolean visit(SQLIntegerExpr x) { return SQLEvalVisitorUtils.visit(this, x); diff --git a/src/main/java/com/alibaba/druid/sql/dialect/sqlserver/visitor/SQLServerEvalVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/sqlserver/visitor/SQLServerEvalVisitor.java index 724ebc13a7..f4b5954e40 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/sqlserver/visitor/SQLServerEvalVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/sqlserver/visitor/SQLServerEvalVisitor.java @@ -27,6 +27,7 @@ import com.alibaba.druid.sql.ast.expr.SQLMethodInvokeExpr; import com.alibaba.druid.sql.ast.expr.SQLNullExpr; import com.alibaba.druid.sql.ast.expr.SQLNumberExpr; import com.alibaba.druid.sql.ast.expr.SQLQueryExpr; +import com.alibaba.druid.sql.ast.expr.SQLUnaryExpr; import com.alibaba.druid.sql.ast.expr.SQLVariantRefExpr; import com.alibaba.druid.sql.visitor.SQLEvalVisitor; import com.alibaba.druid.sql.visitor.SQLEvalVisitorUtils; @@ -74,6 +75,10 @@ public class SQLServerEvalVisitor extends SQLServerASTVisitorAdapter implements public boolean visit(SQLBinaryOpExpr x) { return SQLEvalVisitorUtils.visit(this, x); } + + public boolean visit(SQLUnaryExpr x) { + return SQLEvalVisitorUtils.visit(this, x); + } public boolean visit(SQLIntegerExpr x) { return SQLEvalVisitorUtils.visit(this, x); 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 87cfc8a251..fbd798ec4e 100644 --- a/src/main/java/com/alibaba/druid/sql/parser/SQLExprParser.java +++ b/src/main/java/com/alibaba/druid/sql/parser/SQLExprParser.java @@ -126,7 +126,7 @@ public class SQLExprParser extends SQLParser { } public final SQLExpr multiplicative() { - SQLExpr expr = primary(); + SQLExpr expr = bitXor(); return multiplicativeRest(expr); } @@ -798,17 +798,12 @@ public class SQLExprParser extends SQLParser { SQLExpr rightExp = bitAnd(); expr = new SQLBinaryOpExpr(expr, SQLBinaryOperator.BitwiseOr, rightExp); expr = bitAndRest(expr); - } else if (lexer.token() == Token.TILDE) { - lexer.nextToken(); - SQLExpr rightExp = bitAnd(); - expr = new SQLBinaryOpExpr(expr, SQLBinaryOperator.InvertBits, rightExp); - expr = bitAndRest(expr); } return expr; } public final SQLExpr equality() { - SQLExpr expr = shift(); + SQLExpr expr = bitOr(); return equalityRest(expr); } @@ -816,14 +811,14 @@ public class SQLExprParser extends SQLParser { SQLExpr rightExp; if (lexer.token() == Token.EQ) { lexer.nextToken(); - rightExp = shift(); + rightExp = bitOr(); rightExp = equalityRest(rightExp); expr = new SQLBinaryOpExpr(expr, SQLBinaryOperator.Equality, rightExp); } else if (lexer.token() == Token.BANGEQ) { lexer.nextToken(); - rightExp = shift(); + rightExp = bitOr(); rightExp = equalityRest(rightExp); diff --git a/src/main/java/com/alibaba/druid/sql/visitor/SQLEvalVisitorUtils.java b/src/main/java/com/alibaba/druid/sql/visitor/SQLEvalVisitorUtils.java index 9978755777..51044dc3b7 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/SQLEvalVisitorUtils.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/SQLEvalVisitorUtils.java @@ -43,6 +43,8 @@ import com.alibaba.druid.sql.ast.expr.SQLMethodInvokeExpr; import com.alibaba.druid.sql.ast.expr.SQLNullExpr; import com.alibaba.druid.sql.ast.expr.SQLNumericLiteralExpr; import com.alibaba.druid.sql.ast.expr.SQLQueryExpr; +import com.alibaba.druid.sql.ast.expr.SQLUnaryExpr; +import com.alibaba.druid.sql.ast.expr.SQLUnaryOperator; import com.alibaba.druid.sql.ast.expr.SQLVariantRefExpr; import com.alibaba.druid.sql.ast.statement.SQLExprTableSource; import com.alibaba.druid.sql.ast.statement.SQLSelectItem; @@ -114,17 +116,17 @@ public class SQLEvalVisitorUtils { if (JdbcUtils.POSTGRESQL.equals(dbType)) { return new PGEvalVisitor(); } - + if (JdbcUtils.SQL_SERVER.equals(dbType)) { return new SQLServerEvalVisitor(); } return new SQLEvalVisitorImpl(); } - + public static boolean visit(SQLEvalVisitor visitor, SQLMethodInvokeExpr x) { String methodName = x.getMethodName().toLowerCase(); - + if ("concat".equals(methodName)) { StringBuilder buf = new StringBuilder(); @@ -762,7 +764,7 @@ public class SQLEvalVisitorUtils { x.putAttribute(EVAL_VALUE, 1); return false; } - + if (x.getSubQuery().getQuery() instanceof SQLSelectQueryBlock) { SQLSelectQueryBlock queryBlock = (SQLSelectQueryBlock) x.getSubQuery().getQuery(); @@ -801,6 +803,15 @@ public class SQLEvalVisitorUtils { return false; } + public static boolean visit(SQLEvalVisitor visitor, SQLUnaryExpr x) { + final WallConditionContext wallConditionContext = WallVisitorUtils.getWallConditionContext(); + if (x.getOperator() == SQLUnaryOperator.Compl && wallConditionContext != null) { + wallConditionContext.setBitwise(true); + } + + return false; + } + public static boolean visit(SQLEvalVisitor visitor, SQLBinaryOpExpr x) { SQLExpr left = x.getLeft(); SQLExpr right = x.getRight(); @@ -817,25 +828,36 @@ public class SQLEvalVisitorUtils { wallConditionContext.setPartAlwayTrue(true); } } + } else if (x.getOperator() == SQLBinaryOperator.BooleanXor) { + if (wallConditionContext != null) { + wallConditionContext.setXor(true); + } + } else if (x.getOperator() == SQLBinaryOperator.BitwiseAnd // + || x.getOperator() == SQLBinaryOperator.BitwiseNot // + || x.getOperator() == SQLBinaryOperator.BitwiseOr // + || x.getOperator() == SQLBinaryOperator.BitwiseXor) { + if (wallConditionContext != null) { + wallConditionContext.setBitwise(true); + } } Object leftValue = left.getAttribute(EVAL_VALUE); Object rightValue = right.getAttributes().get(EVAL_VALUE); - + if (x.getOperator() == SQLBinaryOperator.Like) { if (isAlwayTrueLikePattern(x.getRight())) { x.putAttribute(EVAL_VALUE, Boolean.TRUE); return false; } } - + if (x.getOperator() == SQLBinaryOperator.NotLike) { if (isAlwayTrueLikePattern(x)) { x.putAttribute(EVAL_VALUE, Boolean.FALSE); return false; } } - + if (!left.getAttributes().containsKey(EVAL_VALUE)) { return false; } @@ -845,17 +867,7 @@ public class SQLEvalVisitorUtils { } if (wallConditionContext != null) { - switch (x.getOperator()) { - case Add: - case Subtract: - case Multiply: - case Divide: - case Modulus: - wallConditionContext.setConstArithmetic(true); - break; - default: - break; - } + wallConditionContext.setConstArithmetic(true); } Object value = null; @@ -911,30 +923,30 @@ public class SQLEvalVisitorUtils { String input = castToString(left.getAttributes().get(EVAL_VALUE)); boolean matchResult = Pattern.matches(pattern, input); x.putAttribute(EVAL_VALUE, matchResult); - } break; + } case NotRegExp: case NotRLike: { String pattern = castToString(rightValue); String input = castToString(left.getAttributes().get(EVAL_VALUE)); boolean matchResult = !Pattern.matches(pattern, input); x.putAttribute(EVAL_VALUE, matchResult); - } break; + } case Like: { String pattern = castToString(rightValue); String input = castToString(left.getAttributes().get(EVAL_VALUE)); boolean matchResult = like(input, pattern); x.putAttribute(EVAL_VALUE, matchResult); - } break; + } case NotLike: { String pattern = castToString(rightValue); String input = castToString(left.getAttributes().get(EVAL_VALUE)); boolean matchResult = !like(input, pattern); x.putAttribute(EVAL_VALUE, matchResult); - } break; + } case Concat: { String result = leftValue.toString() + rightValue.toString(); x.putAttribute(EVAL_VALUE, result); @@ -1609,6 +1621,5 @@ public class SQLEvalVisitorUtils { String regexpr = regexprBuilder.toString(); return Pattern.matches(regexpr, input); } - } diff --git a/src/main/java/com/alibaba/druid/wall/WallConfig.java b/src/main/java/com/alibaba/druid/wall/WallConfig.java index 8678766e8f..a8807784b4 100644 --- a/src/main/java/com/alibaba/druid/wall/WallConfig.java +++ b/src/main/java/com/alibaba/druid/wall/WallConfig.java @@ -51,7 +51,7 @@ public class WallConfig implements WallConfigMBean { private boolean commentAllow = false; private boolean strictSyntaxCheck = true; - private boolean constArithmeticAllow = false; + private boolean constArithmeticAllow = true; private boolean describeAllow = false; @@ -83,10 +83,29 @@ public class WallConfig implements WallConfigMBean { private boolean wrapAllow = true; private boolean metadataAllow = true; + private boolean conditionOpXorAllow = false; + private boolean conditionOpBitwseAllow = false; + public WallConfig(){ } + public boolean isConditionOpXorAllow() { + return conditionOpXorAllow; + } + + public void setConditionOpXorAllow(boolean conditionOpXorAllow) { + this.conditionOpXorAllow = conditionOpXorAllow; + } + + public boolean isConditionOpBitwseAllow() { + return conditionOpBitwseAllow; + } + + public void setConditionOpBitwseAllow(boolean conditionOpBitwseAllow) { + this.conditionOpBitwseAllow = conditionOpBitwseAllow; + } + public String getTenantTablePattern() { return tenantTablePattern; } diff --git a/src/main/java/com/alibaba/druid/wall/spi/WallVisitorUtils.java b/src/main/java/com/alibaba/druid/wall/spi/WallVisitorUtils.java index af982d4b5b..7758e32b19 100644 --- a/src/main/java/com/alibaba/druid/wall/spi/WallVisitorUtils.java +++ b/src/main/java/com/alibaba/druid/wall/spi/WallVisitorUtils.java @@ -464,24 +464,26 @@ public class WallVisitorUtils { if (wallContext != null) { dbType = wallContext.getDbType(); } - + return SQLEvalVisitorUtils.eval(dbType, x, Collections.emptyList(), false); } public static class WallConditionContext { - private boolean partAllowTrue; + private boolean partAlwayrue; private boolean constArithmetic = false; + private boolean xor = false; + private boolean bitwise = false; - public boolean isPartAllowTrue() { - return partAllowTrue; + public boolean hasPartAlwayTrue() { + return partAlwayrue; } public void setPartAlwayTrue(boolean partAllowTrue) { - this.partAllowTrue = partAllowTrue; + this.partAlwayrue = partAllowTrue; } - public boolean isConstArithmetic() { + public boolean hasConstArithmetic() { return constArithmetic; } @@ -489,6 +491,21 @@ public class WallVisitorUtils { this.constArithmetic = constArithmetic; } + public boolean hasXor() { + return xor; + } + + public void setXor(boolean xor) { + this.xor = xor; + } + + public boolean hasBitwise() { + return bitwise; + } + + public void setBitwise(boolean bitwise) { + this.bitwise = bitwise; + } } private static ThreadLocal wallConditionContextLocal = new ThreadLocal(); @@ -504,11 +521,19 @@ public class WallVisitorUtils { final Object value = getValue(x); final WallConditionContext current = wallConditionContextLocal.get(); - if (current.isPartAllowTrue() && alwayTrueCheck) { + if (current.hasPartAlwayTrue() && alwayTrueCheck) { addViolation(visitor, x); } - if (current.isConstArithmetic() && !visitor.getConfig().isConstArithmeticAllow()) { + if (current.hasConstArithmetic() && !visitor.getConfig().isConstArithmeticAllow()) { + addViolation(visitor, x); + } + + if (current.hasXor() && !visitor.getConfig().isConditionOpXorAllow()) { + addViolation(visitor, x); + } + + if (current.hasBitwise() && !visitor.getConfig().isConditionOpBitwseAllow()) { addViolation(visitor, x); } diff --git a/src/test/java/com/alibaba/druid/bvt/filter/wall/BitwiseAndTest.java b/src/test/java/com/alibaba/druid/bvt/filter/wall/BitwiseAndTest.java new file mode 100644 index 0000000000..7f3579daff --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/filter/wall/BitwiseAndTest.java @@ -0,0 +1,23 @@ +package com.alibaba.druid.bvt.filter.wall; + +import junit.framework.TestCase; + +import org.junit.Assert; + +import com.alibaba.druid.wall.WallConfig; +import com.alibaba.druid.wall.WallUtils; + +public class BitwiseAndTest extends TestCase { + + public void test_false() throws Exception { + Assert.assertFalse(WallUtils.isValidateMySql(// + "SELECT * from t where id = 1 & 2")); // + } + + public void test_true() throws Exception { + WallConfig config = new WallConfig(); + config.setConditionOpBitwseAllow(true); + Assert.assertTrue(WallUtils.isValidateMySql(// + "SELECT * from t where id = 1 & 2", config)); // + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/filter/wall/BitwiseInvertTest.java b/src/test/java/com/alibaba/druid/bvt/filter/wall/BitwiseInvertTest.java new file mode 100644 index 0000000000..270b4b8659 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/filter/wall/BitwiseInvertTest.java @@ -0,0 +1,23 @@ +package com.alibaba.druid.bvt.filter.wall; + +import junit.framework.TestCase; + +import org.junit.Assert; + +import com.alibaba.druid.wall.WallConfig; +import com.alibaba.druid.wall.WallUtils; + +public class BitwiseInvertTest extends TestCase { + + public void test_false() throws Exception { + Assert.assertFalse(WallUtils.isValidateMySql(// + "SELECT * from t where id = ~2")); // + } + + public void test_true() throws Exception { + WallConfig config = new WallConfig(); + config.setConditionOpBitwseAllow(true); + Assert.assertTrue(WallUtils.isValidateMySql(// + "SELECT * from t where id = ~2", config)); // + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/filter/wall/BitwiseOrTest.java b/src/test/java/com/alibaba/druid/bvt/filter/wall/BitwiseOrTest.java new file mode 100644 index 0000000000..9ee5e16e4f --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/filter/wall/BitwiseOrTest.java @@ -0,0 +1,23 @@ +package com.alibaba.druid.bvt.filter.wall; + +import junit.framework.TestCase; + +import org.junit.Assert; + +import com.alibaba.druid.wall.WallConfig; +import com.alibaba.druid.wall.WallUtils; + +public class BitwiseOrTest extends TestCase { + + public void test_false() throws Exception { + Assert.assertFalse(WallUtils.isValidateMySql(// + "SELECT * from t where id = 1 | 2")); // + } + + public void test_true() throws Exception { + WallConfig config = new WallConfig(); + config.setConditionOpBitwseAllow(true); + Assert.assertTrue(WallUtils.isValidateMySql(// + "SELECT * from t where id = 1 | 2", config)); // + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/filter/wall/BitwiseXorTest.java b/src/test/java/com/alibaba/druid/bvt/filter/wall/BitwiseXorTest.java new file mode 100644 index 0000000000..2e707a0a36 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/filter/wall/BitwiseXorTest.java @@ -0,0 +1,23 @@ +package com.alibaba.druid.bvt.filter.wall; + +import junit.framework.TestCase; + +import org.junit.Assert; + +import com.alibaba.druid.wall.WallConfig; +import com.alibaba.druid.wall.WallUtils; + +public class BitwiseXorTest extends TestCase { + + public void test_false() throws Exception { + Assert.assertFalse(WallUtils.isValidateMySql(// + "SELECT * from t where id = 1 ^ 2")); // + } + + public void test_true() throws Exception { + WallConfig config = new WallConfig(); + config.setConditionOpBitwseAllow(true); + Assert.assertTrue(WallUtils.isValidateMySql(// + "SELECT * from t where id = 1 ^ 2", config)); // + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/filter/wall/BooleanXorTest.java b/src/test/java/com/alibaba/druid/bvt/filter/wall/BooleanXorTest.java new file mode 100644 index 0000000000..fcb38d971e --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/filter/wall/BooleanXorTest.java @@ -0,0 +1,23 @@ +package com.alibaba.druid.bvt.filter.wall; + +import junit.framework.TestCase; + +import org.junit.Assert; + +import com.alibaba.druid.wall.WallConfig; +import com.alibaba.druid.wall.WallUtils; + +public class BooleanXorTest extends TestCase { + + public void test_false() throws Exception { + Assert.assertFalse(WallUtils.isValidateMySql(// + "SELECT * from t where id = 1 XOR id = 2")); // + } + + public void test_true() throws Exception { + WallConfig config = new WallConfig(); + config.setConditionOpXorAllow(true); + Assert.assertTrue(WallUtils.isValidateMySql(// + "SELECT * from t where id = 1 XOR id = 2", config)); // + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/filter/wall/ConstantArithmeticCheckTest.java b/src/test/java/com/alibaba/druid/bvt/filter/wall/ConstantArithmeticCheckTest.java index 738eee3df0..d0bb3f77e5 100644 --- a/src/test/java/com/alibaba/druid/bvt/filter/wall/ConstantArithmeticCheckTest.java +++ b/src/test/java/com/alibaba/druid/bvt/filter/wall/ConstantArithmeticCheckTest.java @@ -4,12 +4,20 @@ import junit.framework.TestCase; import org.junit.Assert; +import com.alibaba.druid.wall.WallConfig; import com.alibaba.druid.wall.WallUtils; public class ConstantArithmeticCheckTest extends TestCase { public void test_true() throws Exception { + Assert.assertTrue(WallUtils.isValidateMySql(// + "SELECT * from t where id = 3 - 1")); // + } + + public void test_false() throws Exception { + WallConfig config = new WallConfig(); + config.setConstArithmeticAllow(false); Assert.assertFalse(WallUtils.isValidateMySql(// - "SELECT * from t where id = 3 - 1")); // + "SELECT * from t where id = 3 - 1", config)); // } } diff --git a/src/test/java/com/alibaba/druid/bvt/filter/wall/WallSelectWhereTest5.java b/src/test/java/com/alibaba/druid/bvt/filter/wall/WallSelectWhereTest5.java index fa20b64a7e..1071fc3c7b 100644 --- a/src/test/java/com/alibaba/druid/bvt/filter/wall/WallSelectWhereTest5.java +++ b/src/test/java/com/alibaba/druid/bvt/filter/wall/WallSelectWhereTest5.java @@ -22,7 +22,6 @@ import org.junit.Assert; import com.alibaba.druid.wall.WallUtils; /** - * 这个场景,检测可疑的Having条件 * @author wenshao * */