[
https://issues.apache.org/jira/browse/WW-4171?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13730908#comment-13730908
]
Coverity Security Research Laboratory commented on WW-4171:
-----------------------------------------------------------
Lukasz,
I ran the sample tutorial application and modified the HelloWorld.java as such:
{code:java}
public String execute() throws Exception {
setMessage(getText(getMessage()));
return SUCCESS;
}
{code}
And here's the current stack when debugging the tutorial under Eclipse via this
URL:
{code}http://127.0.0.1:8080/tutorial/example/HelloWorld.action?message=${2*3}{code}
{code:java}
Daemon Thread [http-8080-1] (Suspended (entry into method translateVariables in
TextParseUtil))
TextParseUtil.translateVariables(char[], String, ValueStack, Class,
TextParseUtil$ParsedValueEvaluator, int) line: 156
TextParseUtil.translateVariables(char[], String, ValueStack, Class,
TextParseUtil$ParsedValueEvaluator) line: 127
TextParseUtil.translateVariables(String, ValueStack) line: 49
LocalizedTextUtil.getDefaultMessage(String, Locale, ValueStack,
Object[], String) line: 663
LocalizedTextUtil.findText(Class, String, Locale, String, Object[],
ValueStack) line: 534
LocalizedTextUtil.findText(Class, String, Locale, String, Object[])
line: 362
TextProviderSupport.getText(String, String, List<?>) line: 208
TextProviderSupport.getText(String) line: 123
HelloWorld(ActionSupport).getText(String) line: 103
HelloWorld.execute() line: 30
NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not
available [native method]
NativeMethodAccessorImpl.invoke(Object, Object[]) line: 57
DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 43
Method.invoke(Object, Object...) line: 601
DefaultActionInvocation.invokeAction(Object, ActionConfig) line: 450
DefaultActionInvocation.invokeActionOnly() line: 289
DefaultActionInvocation.invoke() line: 252
DebuggingInterceptor.intercept(ActionInvocation) line: 256
DefaultActionInvocation.invoke() line: 246
DefaultWorkflowInterceptor.doIntercept(ActionInvocation) line: 176
DefaultWorkflowInterceptor(MethodFilterInterceptor).intercept(ActionInvocation)
line: 98
DefaultActionInvocation.invoke() line: 246
AnnotationValidationInterceptor(ValidationInterceptor).doIntercept(ActionInvocation)
line: 265
AnnotationValidationInterceptor.doIntercept(ActionInvocation) line: 68
AnnotationValidationInterceptor(MethodFilterInterceptor).intercept(ActionInvocation)
line: 98
DefaultActionInvocation.invoke() line: 246
StrutsConversionErrorInterceptor(ConversionErrorInterceptor).intercept(ActionInvocation)
line: 138
DefaultActionInvocation.invoke() line: 246
ParametersInterceptor.doIntercept(ActionInvocation) line: 249
ParametersInterceptor(MethodFilterInterceptor).intercept(ActionInvocation)
line: 98
DefaultActionInvocation.invoke() line: 246
ActionMappingParametersInteceptor(ParametersInterceptor).doIntercept(ActionInvocation)
line: 249
ActionMappingParametersInteceptor(MethodFilterInterceptor).intercept(ActionInvocation)
line: 98
DefaultActionInvocation.invoke() line: 246
StaticParametersInterceptor.intercept(ActionInvocation) line: 191
DefaultActionInvocation.invoke() line: 246
MultiselectInterceptor.intercept(ActionInvocation) line: 73
DefaultActionInvocation.invoke() line: 246
CheckboxInterceptor.intercept(ActionInvocation) line: 91
DefaultActionInvocation.invoke() line: 246
FileUploadInterceptor.intercept(ActionInvocation) line: 252
DefaultActionInvocation.invoke() line: 246
ModelDrivenInterceptor.intercept(ActionInvocation) line: 100
DefaultActionInvocation.invoke() line: 246
ScopedModelDrivenInterceptor.intercept(ActionInvocation) line: 141
DefaultActionInvocation.invoke() line: 246
ChainingInterceptor.intercept(ActionInvocation) line: 145
DefaultActionInvocation.invoke() line: 246
PrepareInterceptor.doIntercept(ActionInvocation) line: 171
PrepareInterceptor(MethodFilterInterceptor).intercept(ActionInvocation)
line: 98
DefaultActionInvocation.invoke() line: 246
I18nInterceptor.intercept(ActionInvocation) line: 176
DefaultActionInvocation.invoke() line: 246
ServletConfigInterceptor.intercept(ActionInvocation) line: 164
DefaultActionInvocation.invoke() line: 246
AliasInterceptor.intercept(ActionInvocation) line: 193
DefaultActionInvocation.invoke() line: 246
ExceptionMappingInterceptor.intercept(ActionInvocation) line: 187
DefaultActionInvocation.invoke() line: 246
StrutsActionProxy.execute() line: 54
Dispatcher.serviceAction(HttpServletRequest, HttpServletResponse,
ServletContext, ActionMapping) line: 546
ExecuteOperations.executeAction(HttpServletRequest,
HttpServletResponse, ActionMapping) line: 77
StrutsPrepareAndExecuteFilter.doFilter(ServletRequest, ServletResponse,
FilterChain) line: 91
ApplicationFilterChain.internalDoFilter(ServletRequest,
ServletResponse) line: 235
ApplicationFilterChain.doFilter(ServletRequest, ServletResponse) line:
206
StandardWrapperValve.invoke(Request, Response) line: 233
StandardContextValve.invoke(Request, Response) line: 191
StandardHostValve.invoke(Request, Response) line: 127
ErrorReportValve.invoke(Request, Response) line: 102
StandardEngineValve.invoke(Request, Response) line: 109
CoyoteAdapter.service(Request, Response) line: 298
Http11Processor.process(Socket) line: 857
Http11Protocol$Http11ConnectionHandler.process(Socket) line: 588
JIoEndpoint$Worker.run() line: 489
Thread.run() line: 722
{code}
The result is the value 6 being displayed. OGNL evaluation is occurring via
this .getText method.
Regards
> getText methods are not documented as evaluating OGNL
> -----------------------------------------------------
>
> Key: WW-4171
> URL: https://issues.apache.org/jira/browse/WW-4171
> Project: Struts 2
> Issue Type: Improvement
> Components: Documentation
> Affects Versions: 2.3.15.1
> Reporter: Coverity Security Research Laboratory
> Assignee: Lukasz Lenart
> Priority: Minor
> Labels: security
> Fix For: 2.3.16
>
>
> The methods below evaluate OGNL as their first parameter. However they are
> not documented as evaluating OGNL. We have observed this occurring in one
> project and are contacting the affected vendors.
> com.opensymphony.xwork2.TextProviderSupport.getText(String, String[])
> com.opensymphony.xwork2.TextProviderSupport.getText(String, List<?>)
> com.opensymphony.xwork2.TextProviderSupport.getText(String)
> These methods are then used by ActionSupport (via its getText methods). None
> of these methods are documented as evaluating OGNL either.
> This issue is recommending that all of these methods are documented as
> evaluating OGNL since this may come as a surprise to some developers.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira