This is an automated email from the ASF dual-hosted git repository. kusal pushed a commit to branch WW-5340-subclassable in repository https://gitbox.apache.org/repos/asf/struts.git
commit 20eafb632721627b4bef2463e80b7dad42fd4dd6 Author: Kusal Kithul-Godage <g...@kusal.io> AuthorDate: Fri Oct 6 04:16:57 2023 +1100 WW-5340 Mild refactor StrutsOgnlGuard for easier subclassing --- .../org/apache/struts2/ognl/StrutsOgnlGuard.java | 36 ++++++++++++++-------- 1 file changed, 23 insertions(+), 13 deletions(-) diff --git a/core/src/main/java/org/apache/struts2/ognl/StrutsOgnlGuard.java b/core/src/main/java/org/apache/struts2/ognl/StrutsOgnlGuard.java index 262aec362..0cb4d1d93 100644 --- a/core/src/main/java/org/apache/struts2/ognl/StrutsOgnlGuard.java +++ b/core/src/main/java/org/apache/struts2/ognl/StrutsOgnlGuard.java @@ -71,28 +71,38 @@ public class StrutsOgnlGuard implements OgnlGuard { @Override public boolean isParsedTreeBlocked(Object tree) { - return containsExcludedNodeType(tree); + if (!(tree instanceof Node) || skipTreeCheck((Node) tree)) { + return false; + } + return recurseNodes((Node) tree); } - protected boolean containsExcludedNodeType(Object tree) { - if (!(tree instanceof Node) || excludedNodeTypes.isEmpty()) { - return false; + protected boolean skipTreeCheck(Node tree) { + return excludedNodeTypes.isEmpty(); + } + + protected boolean recurseNodes(Node node) { + if (checkNode(node)) { + return true; + } + for (int i = 0; i < node.jjtGetNumChildren(); i++) { + if (recurseNodes(node.jjtGetChild(i))) { + return true; + } } - return recurseExcludedNodeType((Node) tree); + return false; + } + + protected boolean checkNode(Node node) { + return containsExcludedNodeType(node); } - protected boolean recurseExcludedNodeType(Node node) { + protected boolean containsExcludedNodeType(Node node) { String nodeClassName = node.getClass().getName(); if (excludedNodeTypes.contains(nodeClassName)) { LOG.warn("Expression contains blocked node type [{}]", nodeClassName); return true; - } else { - for (int i = 0; i < node.jjtGetNumChildren(); i++) { - if (recurseExcludedNodeType(node.jjtGetChild(i))) { - return true; - } - } - return false; } + return false; } }