Author: mgrigorov
Date: Wed Mar  2 15:40:58 2011
New Revision: 1076261

URL: http://svn.apache.org/viewvc?rev=1076261&view=rev
Log:
WICKET-3490 HybridUrlEncoding Strategy throws uncaught NumberFormatException if 
Integer value space is violated

Return 'null' PageInfo if pageId or versionId is not parseable to Integer.


Added:
    
wicket/branches/wicket-1.4.x/wicket/src/test/java/org/apache/wicket/request/target/coding/HybridUrlCodingStrategyTest.java
Modified:
    
wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/request/target/coding/HybridUrlCodingStrategy.java

Modified: 
wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/request/target/coding/HybridUrlCodingStrategy.java
URL: 
http://svn.apache.org/viewvc/wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/request/target/coding/HybridUrlCodingStrategy.java?rev=1076261&r1=1076260&r2=1076261&view=diff
==============================================================================
--- 
wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/request/target/coding/HybridUrlCodingStrategy.java
 (original)
+++ 
wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/request/target/coding/HybridUrlCodingStrategy.java
 Wed Mar  2 15:40:58 2011
@@ -37,6 +37,8 @@ import org.apache.wicket.request.target.
 import 
org.apache.wicket.request.target.component.listener.ListenerInterfaceRequestTarget;
 import org.apache.wicket.util.string.AppendingStringBuffer;
 import org.apache.wicket.util.string.Strings;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 
 /**
@@ -676,6 +678,8 @@ public class HybridUrlCodingStrategy ext
         */
        protected static class PageInfo
        {
+               private static final Logger logger = 
LoggerFactory.getLogger(PageInfo.class);
+
                private final Integer pageId;
                private final Integer versionNumber;
                private final String pageMapName;
@@ -854,7 +858,7 @@ public class HybridUrlCodingStrategy ext
                                return null;
                        }
 
-                       // go trhough the segments to determine if they don't 
contains invalid characters
+                       // go through the segments to determine if they don't 
contains invalid characters
                        for (int i = 0; i < segments.length; ++i)
                        {
                                for (int j = 0; j < segments[i].length(); ++j)
@@ -867,48 +871,56 @@ public class HybridUrlCodingStrategy ext
                                }
                        }
 
-                       if ((segments.length == 1) && isNumber(segments[0]))
-                       {
-                               // pageId
-                               return new 
PageInfo(Integer.valueOf(segments[0]), new Integer(0), null);
-                       }
-                       else if ((segments.length == 2) && 
isNumber(segments[0]) && isNumber(segments[1]))
-                       {
-                               // pageId:pageVersion
-                               return new 
PageInfo(Integer.valueOf(segments[0]), Integer.valueOf(segments[1]),
-                                       null);
-                       }
-                       else if ((segments.length == 1) && 
!isNumber(segments[0]))
-                       {
-                               // pageMap (starts with letter)
-                               return new PageInfo(null, null, segments[0]);
-                       }
-                       else if ((segments.length == 2) && 
(segments[0].length() == 0))
-                       {
-                               // .pageMap
-                               return new PageInfo(null, null, segments[1]);
-                       }
-                       else if ((segments.length == 2) && 
!isNumber(segments[0]) && isNumber(segments[1]))
+                       try
                        {
-                               // pageMap.pageId (pageMap starts with letter)
-                               return new 
PageInfo(Integer.valueOf(segments[1]), new Integer(0), segments[0]);
-                       }
-                       else if (segments.length == 3)
-                       {
-                               if ((segments[2].length() == 0) && 
isNumber(segments[1]))
+                               if ((segments.length == 1) && 
isNumber(segments[0]))
                                {
-                                       // we don't encode it like this, but we 
still should be able
-                                       // to parse it
-                                       // pageMapName.pageId.
+                                       // pageId
+                                       return new 
PageInfo(Integer.valueOf(segments[0]), new Integer(0), null);
+                               }
+                               else if ((segments.length == 2) && 
isNumber(segments[0]) && isNumber(segments[1]))
+                               {
+                                       // pageId:pageVersion
+                                       return new 
PageInfo(Integer.valueOf(segments[0]), Integer.valueOf(segments[1]),
+                                               null);
+                               }
+                               else if ((segments.length == 1) && 
!isNumber(segments[0]))
+                               {
+                                       // pageMap (starts with letter)
+                                       return new PageInfo(null, null, 
segments[0]);
+                               }
+                               else if ((segments.length == 2) && 
(segments[0].length() == 0))
+                               {
+                                       // .pageMap
+                                       return new PageInfo(null, null, 
segments[1]);
+                               }
+                               else if ((segments.length == 2) && 
!isNumber(segments[0]) && isNumber(segments[1]))
+                               {
+                                       // pageMap.pageId (pageMap starts with 
letter)
                                        return new 
PageInfo(Integer.valueOf(segments[1]), new Integer(0), segments[0]);
                                }
-                               else if (isNumber(segments[1]) && 
isNumber(segments[2]))
+                               else if (segments.length == 3)
                                {
-                                       // pageMapName.pageId.pageVersion
-                                       return new 
PageInfo(Integer.valueOf(segments[1]), Integer.valueOf(segments[2]),
-                                               segments[0]);
+                                       if ((segments[2].length() == 0) && 
isNumber(segments[1]))
+                                       {
+                                               // we don't encode it like 
this, but we still should be able
+                                               // to parse it
+                                               // pageMapName.pageId.
+                                               return new 
PageInfo(Integer.valueOf(segments[1]), new Integer(0),
+                                                       segments[0]);
+                                       }
+                                       else if (isNumber(segments[1]) && 
isNumber(segments[2]))
+                                       {
+                                               // 
pageMapName.pageId.pageVersion
+                                               return new 
PageInfo(Integer.valueOf(segments[1]),
+                                                       
Integer.valueOf(segments[2]), segments[0]);
+                                       }
                                }
                        }
+                       catch (NumberFormatException nfx)
+                       {
+                               logger.debug("Cannot parse PageInfo from '{}': 
{}", src, nfx.getMessage());
+                       }
 
                        return null;
                }

Added: 
wicket/branches/wicket-1.4.x/wicket/src/test/java/org/apache/wicket/request/target/coding/HybridUrlCodingStrategyTest.java
URL: 
http://svn.apache.org/viewvc/wicket/branches/wicket-1.4.x/wicket/src/test/java/org/apache/wicket/request/target/coding/HybridUrlCodingStrategyTest.java?rev=1076261&view=auto
==============================================================================
--- 
wicket/branches/wicket-1.4.x/wicket/src/test/java/org/apache/wicket/request/target/coding/HybridUrlCodingStrategyTest.java
 (added)
+++ 
wicket/branches/wicket-1.4.x/wicket/src/test/java/org/apache/wicket/request/target/coding/HybridUrlCodingStrategyTest.java
 Wed Mar  2 15:40:58 2011
@@ -0,0 +1,34 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.request.target.coding;
+
+import junit.framework.TestCase;
+
+import 
org.apache.wicket.request.target.coding.HybridUrlCodingStrategy.PageInfo;
+
+public class HybridUrlCodingStrategyTest extends TestCase
+{
+
+       /**
+        * <a 
href="https://issues.apache.org/jira/browse/WICKET-3490";>WICKET-3490</a>
+        */
+       public void testParsePageInfo()
+       {
+               PageInfo pageInfo = 
PageInfo.parsePageInfo("99999999999999999999999999999999999999999999999999999999999999999999999");
+               assertNull(pageInfo);
+       }
+}


Reply via email to