From 889c1e0ad710b1847fa0b8e8cc1c800948cd7468 Mon Sep 17 00:00:00 2001 From: wenshao Date: Fri, 29 Mar 2013 15:22:59 +0800 Subject: [PATCH] improve wall filter --- pom.xml | 2 +- .../druid/wall/spi/WallVisitorUtils.java | 18 +++++++++++++++++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 0c3d28a973..427a30019d 100644 --- a/pom.xml +++ b/pom.xml @@ -131,7 +131,7 @@ - false + true public UTF-8 UTF-8 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 d1cfba9a86..1218523a27 100644 --- a/src/main/java/com/alibaba/druid/wall/spi/WallVisitorUtils.java +++ b/src/main/java/com/alibaba/druid/wall/spi/WallVisitorUtils.java @@ -449,7 +449,7 @@ public class WallVisitorUtils { } if (leftResult == Boolean.TRUE) { - if (x.getParent() instanceof SQLExpr) { + if (!isFirst(x.getLeft())) { final WallConditionContext current = wallConditionContextLocal.get(); if (current != null) { current.setPartAlwayTrue(true); @@ -475,6 +475,22 @@ public class WallVisitorUtils { return SQLEvalVisitorUtils.eval(dbType, x, Collections.emptyList(), false); } + + public static boolean isFirst(SQLObject x) { + SQLObject parent = x.getParent(); + if (!(parent instanceof SQLExpr)) { + return true; + } + + if (parent instanceof SQLBinaryOpExpr) { + SQLBinaryOpExpr binaryExpr = (SQLBinaryOpExpr) parent; + if (isFirst(binaryExpr.getParent()) && x == binaryExpr.getLeft()) { + return true; + } + } + + return false; + } public static class WallConditionContext {