From ac3626617a7077e960a8862c3aff1b0f0dc1810e Mon Sep 17 00:00:00 2001 From: wenshao Date: Mon, 4 Sep 2017 03:10:27 +0800 Subject: [PATCH] bug fixed for WallFilter. issue #1943 --- .../com/alibaba/druid/util/FnvConstants.java | 20 ------------------- .../druid/wall/spi/WallVisitorUtils.java | 14 +++---------- .../wall/mysql/MySqlWallTest147_optimize.java | 18 +++++++++++++++++ 3 files changed, 21 insertions(+), 31 deletions(-) delete mode 100644 src/main/java/com/alibaba/druid/util/FnvConstants.java create mode 100644 src/test/java/com/alibaba/druid/bvt/filter/wall/mysql/MySqlWallTest147_optimize.java diff --git a/src/main/java/com/alibaba/druid/util/FnvConstants.java b/src/main/java/com/alibaba/druid/util/FnvConstants.java deleted file mode 100644 index 486dbda597..0000000000 --- a/src/main/java/com/alibaba/druid/util/FnvConstants.java +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Copyright 1999-2017 Alibaba Group Holding Ltd. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.alibaba.druid.util; - -public interface FnvConstants extends FnvHash.Constants { - -} 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 3df780d9a0..09e574009b 100644 --- a/src/main/java/com/alibaba/druid/wall/spi/WallVisitorUtils.java +++ b/src/main/java/com/alibaba/druid/wall/spi/WallVisitorUtils.java @@ -28,16 +28,7 @@ import com.alibaba.druid.sql.ast.statement.*; import com.alibaba.druid.sql.ast.statement.SQLInsertStatement.ValuesClause; import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlOrderingExpr; import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlOutFileExpr; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlDeleteStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlExplainStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlHintStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlInsertStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlLockTableStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlRenameTableStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlReplaceStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowGrantsStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlUpdateStatement; +import com.alibaba.druid.sql.dialect.mysql.ast.statement.*; import com.alibaba.druid.sql.dialect.mysql.parser.MySqlStatementParser; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleExecuteImmediateStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleMultiInsertStatement; @@ -2568,7 +2559,8 @@ public class WallVisitorUtils { allow = config.isBlockAllow(); denyMessage = "block statement not allow"; errorCode = ErrorCode.BLOCK_NOT_ALLOW; - } else if (x instanceof SQLExplainStatement) { + } else if (x instanceof SQLExplainStatement + || x instanceof MySqlOptimizeStatement) { allow = true; errorCode = 0; denyMessage = null; diff --git a/src/test/java/com/alibaba/druid/bvt/filter/wall/mysql/MySqlWallTest147_optimize.java b/src/test/java/com/alibaba/druid/bvt/filter/wall/mysql/MySqlWallTest147_optimize.java new file mode 100644 index 0000000000..9c5bf8f1eb --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/filter/wall/mysql/MySqlWallTest147_optimize.java @@ -0,0 +1,18 @@ +package com.alibaba.druid.bvt.filter.wall.mysql; + +import com.alibaba.druid.wall.WallProvider; +import com.alibaba.druid.wall.spi.MySqlWallProvider; +import junit.framework.TestCase; +import org.junit.Assert; + +public class MySqlWallTest147_optimize extends TestCase { + + public void test_false() throws Exception { + WallProvider provider = new MySqlWallProvider(); + + String sql = "optimize table table1"; + Assert.assertTrue( + provider.checkValid(sql) + ); + } +}