Author: markt
Date: Thu Aug  8 16:46:55 2013
New Revision: 1511866

URL: http://svn.apache.org/r1511866
Log:
Duplicate path parameters are invalid

Modified:
    tomcat/trunk/java/org/apache/tomcat/websocket/server/UriTemplate.java
    tomcat/trunk/res/findbugs/filter-false-positives.xml
    tomcat/trunk/test/org/apache/tomcat/websocket/server/TestUriTemplate.java

Modified: tomcat/trunk/java/org/apache/tomcat/websocket/server/UriTemplate.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/server/UriTemplate.java?rev=1511866&r1=1511865&r2=1511866&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/websocket/server/UriTemplate.java 
(original)
+++ tomcat/trunk/java/org/apache/tomcat/websocket/server/UriTemplate.java Thu 
Aug  8 16:46:55 2013
@@ -16,10 +16,9 @@
  */
 package org.apache.tomcat.websocket.server;
 
-import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Iterator;
-import java.util.List;
+import java.util.LinkedHashMap;
 import java.util.Map;
 
 import javax.websocket.DeploymentException;
@@ -36,7 +35,7 @@ public class UriTemplate {
             StringManager.getManager(Constants.PACKAGE_NAME);
 
     private final String normalized;
-    private final List<Segment> segments = new ArrayList<>();
+    private final Map<String,Segment> segments = new LinkedHashMap<>();
     private final boolean hasParameters;
 
 
@@ -73,7 +72,12 @@ public class UriTemplate {
                 }
                 normalized.append(segment);
             }
-            this.segments.add(new Segment(index, segment));
+            Segment old =
+                    this.segments.put(segment, new Segment(index, segment));
+            if (old != null) {
+                throw new IllegalArgumentException(
+                        sm.getString("uriTemplate.duplicateName", segment));
+            }
             segmentCount++;
         }
 
@@ -92,8 +96,8 @@ public class UriTemplate {
         }
 
         Iterator<Segment> candidateSegments =
-                candidate.getSegments().iterator();
-        Iterator<Segment> targetSegments = segments.iterator();
+                candidate.getSegments().values().iterator();
+        Iterator<Segment> targetSegments = segments.values().iterator();
 
         while (candidateSegments.hasNext()) {
             Segment candidateSegment = candidateSegments.next();
@@ -132,7 +136,7 @@ public class UriTemplate {
     }
 
 
-    private List<Segment> getSegments() {
+    private Map<String,Segment> getSegments() {
         return segments;
     }
 

Modified: tomcat/trunk/res/findbugs/filter-false-positives.xml
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/res/findbugs/filter-false-positives.xml?rev=1511866&r1=1511865&r2=1511866&view=diff
==============================================================================
--- tomcat/trunk/res/findbugs/filter-false-positives.xml (original)
+++ tomcat/trunk/res/findbugs/filter-false-positives.xml Thu Aug  8 16:46:55 
2013
@@ -639,7 +639,8 @@
     <Or>
       <Method name="testBasicPrefix" />
       <Method name="testQuote2" />
+      <Method name="testDuplicate" />
     </Or>
-    <Bug code="DLS" />
+    <Bug  pattern="DLS_DEAD_LOCAL_STORE"/>
   </Match>
 </FindBugsFilter>
\ No newline at end of file

Modified: 
tomcat/trunk/test/org/apache/tomcat/websocket/server/TestUriTemplate.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/tomcat/websocket/server/TestUriTemplate.java?rev=1511866&r1=1511865&r2=1511866&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/tomcat/websocket/server/TestUriTemplate.java 
(original)
+++ tomcat/trunk/test/org/apache/tomcat/websocket/server/TestUriTemplate.java 
Thu Aug  8 16:46:55 2013
@@ -151,4 +151,11 @@ public class TestUriTemplate {
 
         Assert.assertNull(result);
    }
+
+
+    @Test(expected=java.lang.IllegalArgumentException.class)
+    public void testDuplicate() throws Exception {
+        @SuppressWarnings("unused")
+        UriTemplate t = new UriTemplate("/{var}/{var}");
+   }
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to