[ 
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

Reply via email to