Anonymous avatar Anonymous committed 4a1158c

FIX Query String containing large numbers causes exception
http://jira.opensymphony.com/browse/XW-281

git-svn-id: http://svn.opensymphony.com/svn/xwork/trunk@894 e221344d-f017-0410-9bd5-d282ab1896d7

Comments (0)

Files changed (2)

src/java/com/opensymphony/xwork/util/OgnlValueStack.java

                     LOG.debug("Error setting value", e);
                 }
             }
+        } catch (RuntimeException re) { //XW-281
+            if (throwExceptionOnFailure) {
+                String msg = "Error setting expr '" + expr + "' with value '" + value + "'";
+                LOG.error(msg, re);
+                throw re;
+            } else {
+                if (LOG.isDebugEnabled()) {
+                    LOG.debug("Error setting value", re);
+                }
+            }
         } finally {
             OgnlContextState.clear(context);
             context.remove(XWorkConverter.CONVERSION_PROPERTY_FULLNAME);

src/test/com/opensymphony/xwork/util/OgnlUtilTest.java

         assertEquals(123, foo.getALong());
     }
 
+    /**
+	 * XW-281
+	 */
+    public void testSetBigIndexedValue() {
+        OgnlValueStack stack = new OgnlValueStack();
+        Map stackContext = stack.getContext();
+        stackContext.put(InstantiatingNullHandler.CREATE_NULL_OBJECTS, Boolean.FALSE);
+        stackContext.put(XWorkMethodAccessor.DENY_METHOD_EXECUTION, Boolean.TRUE);
+        stackContext.put(XWorkConverter.REPORT_CONVERSION_ERRORS, Boolean.TRUE);
+
+        User user = new User();
+        stack.push(user);
+
+        // indexed string w/ existing array
+        user.setList(new ArrayList());
+
+        String[] foo = new String[]{"asdf"};
+        stackContext.put(ActionContext.DEV_MODE, Boolean.TRUE);
+        try {
+            stack.setValue("list.1114778947765", foo);
+            fail("non-valid expression: list.1114778947765"); 
+        }
+        catch(RuntimeException ex) {
+            ; // it's oke
+        }
+        
+        try {
+            stack.setValue("1114778947765", foo);
+            fail("non-valid expression: 1114778947765"); 
+        }
+        catch(RuntimeException ex) {
+            ;
+        }
+        
+        try {
+            stack.setValue("1234", foo);
+            fail("non-valid expression: 1114778947765"); 
+        }
+        catch(RuntimeException ex) {
+            ;
+        }
+        
+        stackContext.put(ActionContext.DEV_MODE, Boolean.FALSE);
+        stack.setValue("list.1114778947765", foo);
+        stack.setValue("1114778947765", foo);
+        stack.setValue("1234", foo);
+    }
+    
 
     public static class Email {
         String address;
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.