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()); + } }