husted      01/11/21 06:00:28

  Modified:    src/share/org/apache/struts/util RequestUtils.java
  Log:
  Modify RequestUtils to address issue #4997 - autopopulation exploit.
  This change prevents the Public String properties of ActionServlet from being 
changed via a query string.
  
  Revision  Changes    Path
  1.24      +37 -36    
jakarta-struts/src/share/org/apache/struts/util/RequestUtils.java
  
  Index: RequestUtils.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-struts/src/share/org/apache/struts/util/RequestUtils.java,v
  retrieving revision 1.23
  retrieving revision 1.24
  diff -u -r1.23 -r1.24
  --- RequestUtils.java 2001/10/16 15:48:28     1.23
  +++ RequestUtils.java 2001/11/21 14:00:28     1.24
  @@ -1,7 +1,7 @@
   /*
  - * $Header: 
/home/cvs/jakarta-struts/src/share/org/apache/struts/util/RequestUtils.java,v 1.23 
2001/10/16 15:48:28 dwinterfeldt Exp $
  - * $Revision: 1.23 $
  - * $Date: 2001/10/16 15:48:28 $
  + * $Header: 
/home/cvs/jakarta-struts/src/share/org/apache/struts/util/RequestUtils.java,v 1.24 
2001/11/21 14:00:28 husted Exp $
  + * $Revision: 1.24 $
  + * $Date: 2001/11/21 14:00:28 $
    *
    * ====================================================================
    *
  @@ -90,7 +90,7 @@
   import org.apache.struts.action.ActionMapping;
   import org.apache.struts.action.ActionMessage;
   import org.apache.struts.action.ActionMessages;
  -import org.apache.struts.action.ActionServlet;
  +import org.apache.struts.action.ActionServletWrapper;
   import org.apache.struts.taglib.html.Constants;
   import org.apache.struts.upload.FormFile;
   import org.apache.struts.upload.MultipartRequestHandler;
  @@ -101,7 +101,8 @@
    * in the Struts controller framework.
    *
    * @author Craig R. McClanahan
  - * @version $Revision: 1.23 $ $Date: 2001/10/16 15:48:28 $
  + * @author Ted Husted
  + * @version $Revision: 1.24 $ $Date: 2001/11/21 14:00:28 $
    */
   
   public class RequestUtils {
  @@ -120,8 +121,8 @@
        * The message resources for this package.
        */
       private static MessageResources messages =
  -     MessageResources.getMessageResources
  -     ("org.apache.struts.util.LocalStrings");
  +    MessageResources.getMessageResources
  +    ("org.apache.struts.util.LocalStrings");
   
   
   
  @@ -345,7 +346,7 @@
               url.append('#');
               url.append(URLEncoder.encode(anchor));
           }
  -        
  +
           // Add dynamic parameters if requested
           if ((params != null) && (params.size() > 0)) {
   
  @@ -661,10 +662,10 @@
               (contentType.startsWith("multipart/form-data")) &&
               (method.equalsIgnoreCase("POST"))) {
   
  -            // Get the ActionServlet from the form bean
  -            ActionServlet servlet;
  +            // Get the ActionServletWrapper from the form bean
  +            ActionServletWrapper servlet;
               if (bean instanceof ActionForm) {
  -                servlet = ((ActionForm) bean).getServlet();
  +                servlet = ((ActionForm) bean).getServletWrapper();
               } else {
                   throw new ServletException("bean that's supposed to be " +
                      "populated from a multipart request is not of type " +
  @@ -686,7 +687,7 @@
                   isMultipart = true;
   
                   // Set servlet and mapping info
  -                multipartHandler.setServlet(servlet);
  +                servlet.setServletFor(multipartHandler);
                   multipartHandler.setMapping((ActionMapping)
                       request.getAttribute(Action.MAPPING_KEY));
   
  @@ -744,7 +745,7 @@
        *
        * @param request The HTTP request for which the multipart handler should
        *                be found.
  -     * @param servlet The <code>ActionServlet</code> processing the supplied
  +     * @param servlet The <code>ActionServletWrapper</code> processing the supplied
        *                request.
        *
        * @return the multipart handler to use, or <code>null</code> if none is
  @@ -754,7 +755,7 @@
        *                             to locate the multipart handler.
        */
       private static MultipartRequestHandler getMultipartHandler(
  -            HttpServletRequest request, ActionServlet servlet)
  +            HttpServletRequest request, ActionServletWrapper servlet)
           throws ServletException {
   
           MultipartRequestHandler multipartHandler = null;
  @@ -970,19 +971,19 @@
   
   
       /**
  -     * Retrieves the value from request scope and if it isn't already an 
<code>ActionMessages</code> 
  +     * Retrieves the value from request scope and if it isn't already an 
<code>ActionMessages</code>
        * some classes are converted to one.
        *
  -     * @param pageContext    The PageContext for the current page
  -     * @param paramName      Key for parameter value
  +     * @param pageContext   The PageContext for the current page
  +     * @param paramName     Key for parameter value
        */
       public static ActionMessages getActionMessages(PageContext pageContext, String 
paramName)
          throws JspException {
  -                                                     
  +
           ActionMessages am = new ActionMessages();
  -        
  +
           Object value = pageContext.getAttribute(paramName, 
PageContext.REQUEST_SCOPE);
  -        
  +
           try {
               if (value == null) {
                  ;
  @@ -1012,37 +1013,37 @@
           } catch (Exception e) {
               ;
           }
  -        
  +
           return am;
       }
   
       /**
  -     * Retrieves the value from request scope and if it isn't already an 
<code>ErrorMessages</code> 
  +     * Retrieves the value from request scope and if it isn't already an 
<code>ErrorMessages</code>
        * some classes are converted to one.
        *
  -     * @param pageContext    The PageContext for the current page
  -     * @param paramName      Key for parameter value
  +     * @param pageContext   The PageContext for the current page
  +     * @param paramName     Key for parameter value
        */
  -    public static ActionErrors getActionErrors(PageContext pageContext, String 
paramName) 
  +    public static ActionErrors getActionErrors(PageContext pageContext, String 
paramName)
          throws JspException {
  -                                                     
  +
           ActionErrors errors = new ActionErrors();
  -        
  +
           Object value = pageContext.getAttribute(paramName, 
PageContext.REQUEST_SCOPE);
  -        
  +
           try {
  -         if (value == null) {
  -             ;
  -         } else if (value instanceof String) {
  -             errors.add(ActionErrors.GLOBAL_ERROR,
  +        if (value == null) {
  +        ;
  +        } else if (value instanceof String) {
  +        errors.add(ActionErrors.GLOBAL_ERROR,
                              new ActionError((String) value));
  -         } else if (value instanceof String[]) {
  +        } else if (value instanceof String[]) {
                   String keys[] = (String[]) value;
                   for (int i = 0; i < keys.length; i++)
                       errors.add(ActionErrors.GLOBAL_ERROR,
                                  new ActionError(keys[i]));
               } else if (value instanceof ErrorMessages) {
  -             String keys[] = ((ErrorMessages) value).getErrors();
  +        String keys[] = ((ErrorMessages) value).getErrors();
                   if (keys == null)
                       keys = new String[0];
                   for (int i = 0; i < keys.length; i++)
  @@ -1059,8 +1060,8 @@
           } catch (Exception e) {
               ;
           }
  -        
  +
           return errors;
       }
  -    
  +
   }
  
  
  

--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to