Author: veithen
Date: Fri Jun 24 21:43:40 2011
New Revision: 1139448

URL: http://svn.apache.org/viewvc?rev=1139448&view=rev
Log:
AXIS2-5078: Fixed an issue in QueryStringParser.

Modified:
    
axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/transport/http/util/QueryStringParser.java
    
axis/axis2/java/core/trunk/modules/kernel/test/org/apache/axis2/transport/http/util/QueryStringParserTest.java

Modified: 
axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/transport/http/util/QueryStringParser.java
URL: 
http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/transport/http/util/QueryStringParser.java?rev=1139448&r1=1139447&r2=1139448&view=diff
==============================================================================
--- 
axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/transport/http/util/QueryStringParser.java
 (original)
+++ 
axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/transport/http/util/QueryStringParser.java
 Fri Jun 24 21:43:40 2011
@@ -32,7 +32,7 @@ public class QueryStringParser {
      * The position of the current parameter.
      */
     private int paramBegin;
-    private int paramEnd;
+    private int paramEnd = -1;
     private int paramNameEnd;
     private String paramName;
     private String paramValue;
@@ -55,17 +55,21 @@ public class QueryStringParser {
      */
     public boolean next() {
         int len = queryString.length();
-        if (paramEnd == len) {
-            return false;
+        while (true) {
+            if (paramEnd == len) {
+                return false;
+            }
+            paramBegin = paramEnd == -1 ? 0 : paramEnd+1;
+            int idx = queryString.indexOf('&', paramBegin);
+            paramEnd = idx == -1 ? len : idx;
+            if (paramEnd > paramBegin) {
+                idx = queryString.indexOf('=', paramBegin);
+                paramNameEnd = idx == -1 || idx > paramEnd ? paramEnd : idx;
+                paramName = null;
+                paramValue = null;
+                return true;
+            }
         }
-        paramBegin = paramEnd == 0 ? 0 : paramEnd+1;
-        int idx = queryString.indexOf('&', paramBegin);
-        paramEnd = idx == -1 ? len : idx;
-        idx = queryString.indexOf('=', paramBegin);
-        paramNameEnd = idx == -1 || idx > paramEnd ? paramEnd : idx;
-        paramName = null;
-        paramValue = null;
-        return true;
     }
     
     /**

Modified: 
axis/axis2/java/core/trunk/modules/kernel/test/org/apache/axis2/transport/http/util/QueryStringParserTest.java
URL: 
http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/kernel/test/org/apache/axis2/transport/http/util/QueryStringParserTest.java?rev=1139448&r1=1139447&r2=1139448&view=diff
==============================================================================
--- 
axis/axis2/java/core/trunk/modules/kernel/test/org/apache/axis2/transport/http/util/QueryStringParserTest.java
 (original)
+++ 
axis/axis2/java/core/trunk/modules/kernel/test/org/apache/axis2/transport/http/util/QueryStringParserTest.java
 Fri Jun 24 21:43:40 2011
@@ -78,4 +78,13 @@ public class QueryStringParserTest exten
         assertEquals("20% down", p.getValue());
         assertFalse(p.next());
     }
+    
+    // Regression test for AXIS2-5078
+    public void testEmptyParameter() {
+        QueryStringParser p = new QueryStringParser("&name=value");
+        assertTrue(p.next());
+        assertEquals("name", p.getName());
+        assertEquals("value", p.getValue());
+        assertFalse(p.next());
+    }
 }


Reply via email to