git commit: WW-4374 Fixes problem with accessing Enum's values() method
Repository: struts Updated Branches: refs/heads/develop 47d1fe04d -> bf6b37f2e WW-4374 Fixes problem with accessing Enum's values() method Project: http://git-wip-us.apache.org/repos/asf/struts/repo Commit: http://git-wip-us.apache.org/repos/asf/struts/commit/bf6b37f2 Tree: http://git-wip-us.apache.org/repos/asf/struts/tree/bf6b37f2 Diff: http://git-wip-us.apache.org/repos/asf/struts/diff/bf6b37f2 Branch: refs/heads/develop Commit: bf6b37f2e31214ca9bbdac784bb864c421b7dc29 Parents: 47d1fe0 Author: Lukasz Lenart Authored: Tue Jul 29 09:23:44 2014 +0200 Committer: Lukasz Lenart Committed: Tue Jul 29 09:23:44 2014 +0200 -- .../xwork2/ognl/SecurityMemberAccess.java | 43 ++-- .../xwork2/ognl/OgnlValueStackTest.java | 15 +++ .../xwork2/ognl/SecurityMemberAccessTest.java | 16 3 files changed, 61 insertions(+), 13 deletions(-) -- http://git-wip-us.apache.org/repos/asf/struts/blob/bf6b37f2/xwork-core/src/main/java/com/opensymphony/xwork2/ognl/SecurityMemberAccess.java -- diff --git a/xwork-core/src/main/java/com/opensymphony/xwork2/ognl/SecurityMemberAccess.java b/xwork-core/src/main/java/com/opensymphony/xwork2/ognl/SecurityMemberAccess.java index d0862e7..a172237 100644 --- a/xwork-core/src/main/java/com/opensymphony/xwork2/ognl/SecurityMemberAccess.java +++ b/xwork-core/src/main/java/com/opensymphony/xwork2/ognl/SecurityMemberAccess.java @@ -53,6 +53,13 @@ public class SecurityMemberAccess extends DefaultMemberAccess { @Override public boolean isAccessible(Map context, Object target, Member member, String propertyName) { +if (checkEnumAccess(target, member)) { +if (LOG.isTraceEnabled()) { +LOG.trace("Allowing access to enum #0", target); +} +return true; +} + if (isPackageExcluded(target.getClass().getPackage(), member.getDeclaringClass().getPackage())) { if (LOG.isWarnEnabled()) { LOG.warn("Package of target [#0] or package of member [#1] are excluded!", target, member); @@ -68,17 +75,11 @@ public class SecurityMemberAccess extends DefaultMemberAccess { } boolean allow = true; -int modifiers = member.getModifiers(); -if (Modifier.isStatic(modifiers)) { -if (member instanceof Method && !getAllowStaticMethodAccess()) { -allow = false; -if (target instanceof Class) { -Class clazz = (Class) target; -Method method = (Method) member; -if (Enum.class.isAssignableFrom(clazz) && method.getName().equals("values")) -allow = true; -} +if (!checkStaticMethodAccess(member)) { +if (LOG.isTraceEnabled()) { +LOG.warn("Access to static [#0] is blocked!", member); } +allow = false; } //failed static test @@ -86,10 +87,26 @@ public class SecurityMemberAccess extends DefaultMemberAccess { return false; // Now check for standard scope rules -if (!super.isAccessible(context, target, member, propertyName)) -return false; +return super.isAccessible(context, target, member, propertyName) +&& isAcceptableProperty(propertyName); +} -return isAcceptableProperty(propertyName); +protected boolean checkStaticMethodAccess(Member member) { +int modifiers = member.getModifiers(); +if (Modifier.isStatic(modifiers)) { +return allowStaticMethodAccess; +} else { +return true; +} +} + +protected boolean checkEnumAccess(Object target, Member member) { +if (target instanceof Class) { +Class clazz = (Class) target; +if (Enum.class.isAssignableFrom(clazz) && member.getName().equals("values")) +return true; +} +return false; } protected boolean isPackageExcluded(Package targetPackage, Package memberPackage) { http://git-wip-us.apache.org/repos/asf/struts/blob/bf6b37f2/xwork-core/src/test/java/com/opensymphony/xwork2/ognl/OgnlValueStackTest.java -- diff --git a/xwork-core/src/test/java/com/opensymphony/xwork2/ognl/OgnlValueStackTest.java b/xwork-core/src/test/java/com/opensymphony/xwork2/ognl/OgnlValueStackTest.java index cb71081..e0e949c 100644 --- a/xwork-core/src/test/java/com/opensymphony/xwork2/ognl/OgnlValueStackTest.java +++ b/xwork-core/src/test/java/com/opensymphony/xwork2/ognl/OgnlValueStackTest.java @@ -235,6 +235,17 @@ public class OgnlValueStackTest extends XWorkTestCase { assertEquals("fido", v
git commit: WW-4064 WW-3698 Adds additional flag to cover both cases
Repository: struts Updated Branches: refs/heads/develop bf6b37f2e -> ca50c1aed WW-4064 WW-3698 Adds additional flag to cover both cases Project: http://git-wip-us.apache.org/repos/asf/struts/repo Commit: http://git-wip-us.apache.org/repos/asf/struts/commit/ca50c1ae Tree: http://git-wip-us.apache.org/repos/asf/struts/tree/ca50c1ae Diff: http://git-wip-us.apache.org/repos/asf/struts/diff/ca50c1ae Branch: refs/heads/develop Commit: ca50c1aeddf0325485224b75b3e0cf0cb816a0f2 Parents: bf6b37f Author: Lukasz Lenart Authored: Tue Jul 29 10:04:18 2014 +0200 Committer: Lukasz Lenart Committed: Tue Jul 29 10:04:18 2014 +0200 -- .../jasperreports/JasperReportsResult.java | 7 ++- .../jasperreports/ValueStackDataSource.java | 21 +++- 2 files changed, 18 insertions(+), 10 deletions(-) -- http://git-wip-us.apache.org/repos/asf/struts/blob/ca50c1ae/plugins/jasperreports/src/main/java/org/apache/struts2/views/jasperreports/JasperReportsResult.java -- diff --git a/plugins/jasperreports/src/main/java/org/apache/struts2/views/jasperreports/JasperReportsResult.java b/plugins/jasperreports/src/main/java/org/apache/struts2/views/jasperreports/JasperReportsResult.java index 0e366a1..4cb7de6 100644 --- a/plugins/jasperreports/src/main/java/org/apache/struts2/views/jasperreports/JasperReportsResult.java +++ b/plugins/jasperreports/src/main/java/org/apache/struts2/views/jasperreports/JasperReportsResult.java @@ -155,6 +155,7 @@ public class JasperReportsResult extends StrutsResultSupport implements JasperRe protected String delimiter; protected String imageServletUrl = "/images/"; protected String timeZone; +protected boolean wrapField = true; /** * Connection which can be passed to the report @@ -227,6 +228,10 @@ public class JasperReportsResult extends StrutsResultSupport implements JasperRe this.timeZone = timeZone; } +public void setWrapField(boolean wrapField) { +this.wrapField = wrapField; +} + public String getReportParameters() { return reportParameters; } @@ -284,7 +289,7 @@ public class JasperReportsResult extends StrutsResultSupport implements JasperRe Connection conn = (Connection) stack.findValue(connection); if (conn == null) -stackDataSource = new ValueStackDataSource(stack, dataSource); +stackDataSource = new ValueStackDataSource(stack, dataSource, wrapField); if ("https".equalsIgnoreCase(request.getScheme())) { // set the the HTTP Header to work around IE SSL weirdness http://git-wip-us.apache.org/repos/asf/struts/blob/ca50c1ae/plugins/jasperreports/src/main/java/org/apache/struts2/views/jasperreports/ValueStackDataSource.java -- diff --git a/plugins/jasperreports/src/main/java/org/apache/struts2/views/jasperreports/ValueStackDataSource.java b/plugins/jasperreports/src/main/java/org/apache/struts2/views/jasperreports/ValueStackDataSource.java index 57986b6..6ca1a4a 100644 --- a/plugins/jasperreports/src/main/java/org/apache/struts2/views/jasperreports/ValueStackDataSource.java +++ b/plugins/jasperreports/src/main/java/org/apache/struts2/views/jasperreports/ValueStackDataSource.java @@ -41,12 +41,12 @@ public class ValueStackDataSource implements JRRewindableDataSource { */ private static Logger LOG = LoggerFactory.getLogger(ValueStackDataSource.class); +private Iterator iterator; +private ValueStack valueStack; +private String dataSource; +private boolean wrapField; -Iterator iterator; -ValueStack valueStack; -String dataSource; -boolean firstTimeThrough = true; - +private boolean firstTimeThrough = true; /** * Create a value stack data source on the given iterable property @@ -54,10 +54,11 @@ public class ValueStackDataSource implements JRRewindableDataSource { * @param valueStack The value stack to base the data source on * @param dataSourceParam The property to iterate over for the report */ -public ValueStackDataSource(ValueStack valueStack, String dataSourceParam) { +public ValueStackDataSource(ValueStack valueStack, String dataSourceParam, boolean wrapField) { this.valueStack = valueStack; +this.dataSource = dataSourceParam; +this.wrapField = wrapField; -dataSource = dataSourceParam; Object dataSourceValue = valueStack.findValue(dataSource); if (dataSourceValue != null) { @@ -104,9 +105,11 @@ public class ValueStackDataSource implements JRRewindableDataSource { LOG.debug("Field [#0] = [#1]", field.getName(), value); } -if (MakeIterator.isIterable(value))
git commit: WW-4165 Excludes attributes marked with @StrutsTagAttribute Such attributes won't be used as dynamic attributes and simply will be omitted
Repository: struts Updated Branches: refs/heads/develop ca50c1aed -> 935cd33f7 WW-4165 Excludes attributes marked with @StrutsTagAttribute Such attributes won't be used as dynamic attributes and simply will be omitted Project: http://git-wip-us.apache.org/repos/asf/struts/repo Commit: http://git-wip-us.apache.org/repos/asf/struts/commit/935cd33f Tree: http://git-wip-us.apache.org/repos/asf/struts/tree/935cd33f Diff: http://git-wip-us.apache.org/repos/asf/struts/diff/935cd33f Branch: refs/heads/develop Commit: 935cd33f7e5731e92f114062e7bfdd5a63139a59 Parents: ca50c1a Author: Lukasz Lenart Authored: Tue Jul 29 20:24:01 2014 +0200 Committer: Lukasz Lenart Committed: Tue Jul 29 20:24:01 2014 +0200 -- .../apache/struts2/components/Component.java| 21 .../struts2/views/jsp/ui/AbstractUITag.java | 4 .../apache/struts2/views/jsp/ui/AnchorTest.java | 5 - .../struts2/views/jsp/ui/ComponentTest.java | 13 .../apache/struts2/views/jsp/ui/RadioTest.java | 1 + 5 files changed, 43 insertions(+), 1 deletion(-) -- http://git-wip-us.apache.org/repos/asf/struts/blob/935cd33f/core/src/main/java/org/apache/struts2/components/Component.java -- diff --git a/core/src/main/java/org/apache/struts2/components/Component.java b/core/src/main/java/org/apache/struts2/components/Component.java index 99e3aee..2db1cbc 100644 --- a/core/src/main/java/org/apache/struts2/components/Component.java +++ b/core/src/main/java/org/apache/struts2/components/Component.java @@ -22,14 +22,17 @@ package org.apache.struts2.components; import com.opensymphony.xwork2.inject.Inject; +import com.opensymphony.xwork2.util.AnnotationUtils; import com.opensymphony.xwork2.util.TextParseUtil; import com.opensymphony.xwork2.util.ValueStack; +import org.apache.commons.lang3.StringUtils; import org.apache.struts2.StrutsConstants; import org.apache.struts2.StrutsException; import org.apache.struts2.dispatcher.mapper.ActionMapper; import org.apache.struts2.dispatcher.mapper.ActionMapping; import org.apache.struts2.util.ComponentUtils; import org.apache.struts2.util.FastByteArrayOutputStream; +import org.apache.struts2.views.annotations.StrutsTagAttribute; import org.apache.struts2.views.jsp.TagUtils; import org.apache.struts2.views.util.UrlHelper; @@ -38,6 +41,8 @@ import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; import java.io.Writer; +import java.lang.reflect.Method; +import java.util.Collection; import java.util.LinkedHashMap; import java.util.Map; import java.util.Stack; @@ -490,4 +495,20 @@ public class Component { return false; } +/** + * Checks if provided name is a valid tag's attribute + * + * @param attrName String name of attribute + * @return true if attribute with the same name was already defined + */ +public boolean isValidTagAttribute(String attrName) { +Collection annotatedMethods = AnnotationUtils.getAnnotatedMethods(getClass(), StrutsTagAttribute.class); +for (Method annotatedMethod : annotatedMethods) { +if (annotatedMethod.getName().contains(StringUtils.capitalize(attrName))) { +return true; +} +} +return false; +} + } http://git-wip-us.apache.org/repos/asf/struts/blob/935cd33f/core/src/main/java/org/apache/struts2/views/jsp/ui/AbstractUITag.java -- diff --git a/core/src/main/java/org/apache/struts2/views/jsp/ui/AbstractUITag.java b/core/src/main/java/org/apache/struts2/views/jsp/ui/AbstractUITag.java index e57932a..d12b3a1 100644 --- a/core/src/main/java/org/apache/struts2/views/jsp/ui/AbstractUITag.java +++ b/core/src/main/java/org/apache/struts2/views/jsp/ui/AbstractUITag.java @@ -305,6 +305,10 @@ public abstract class AbstractUITag extends ComponentTagSupport implements Dynam } public void setDynamicAttribute(String uri, String localName, Object value) throws JspException { +if (component.isValidTagAttribute(localName)) { +return; +} + if (ComponentUtils.altSyntax(getStack()) && ComponentUtils.isExpression(value)) { dynamicAttributes.put(localName, String.valueOf(ObjectUtils.defaultIfNull(findValue(value.toString()), value))); } else { http://git-wip-us.apache.org/repos/asf/struts/blob/935cd33f/core/src/test/java/org/apache/struts2/views/jsp/ui/AnchorTest.java -- diff --git a/core/src/test/java/org/apache/struts2/views/jsp/ui/AnchorTest.java b/core/src/test/java/org/apache/struts2/views/jsp/ui/AnchorTest.java index cba1b37..6511944 100644 --- a/core/src/test/java
[CONF] Confluence Changes in the last 24 hours
Confluence Changes in the last 24 hours Apache BookKeeper Pages Page: Bookie Client State Transition created by Sijie Guo [07:31 AM] Apache Camel Pages Page: Rest DSL edited by Claus Ibsen [08:21 AM] (View Changes) Apache Cloudstack Pages Page: Bind and PowerDNS integration by Globo DNSAPI edited by Silvano Buback [11:11 PM] (View Changes) Page: 2014W30 created by Daan Hoogland [09:52 AM] Apache CXF Documentation Pages Page: JAX-RS edited by Daniel Kulp [07:44 PM] (View Changes) Drill Wiki Pages Page: Apache Drill Architectural Overview edited by Bridget Bevens [10:02 PM] (View Changes) Home page: Apache Drill Wiki edited by Bridget Bevens [09:36 PM] (View Changes) Page: Apache Drill in 10 Minutes edited by Bridget Bevens [08:59 PM] (View Changes) Page: Deploying Apache Drill in a Clustered Environment edited by Bridget Bevens [08:33 PM] (View Changes) Page: Planning and Execution Options created by Bob Rumsby [07:08 PM] Page: EXPLAIN Commands edited by Bob Rumsby [07:03 PM] (View Changes) Apache Hive Pages Page: Configuration Properties edited by Lefty Leverenz [09:29 AM] (View Changes) Page: HiveWebInterface edited by Lefty Leverenz [09:16 AM] (View Changes) Apache Mesos Pages Page: A beautiful direction - capitolo 1 created by Elisa Fioravanti [05:15 PM] Page: ~!@~free@@@>>>watch Buffalo Vs Chicago Live stream created by md. abdul sfdsf [03:51 PM] Page: NFL Live Watch: New York Giants vs Buffalo Bills Live Streaming | Giants vs Bills Live Watch created by md. abdul sfdsf [03:48 PM] Page: Insured Profits Review, Wh