You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by co...@apache.org on 2001/09/09 05:14:41 UTC
cvs commit: jakarta-tomcat/src/share/org/apache/tomcat/util/http Parameters.java
costin 01/09/08 20:14:41
Modified: src/share/org/apache/tomcat/util/http Parameters.java
Log:
Bug 3479: parameter parsing with a&b&c syntax ( no '=' ).
Revision Changes Path
1.17 +64 -14 jakarta-tomcat/src/share/org/apache/tomcat/util/http/Parameters.java
Index: Parameters.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/util/http/Parameters.java,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -r1.16 -r1.17
--- Parameters.java 2001/08/31 04:13:11 1.16
+++ Parameters.java 2001/09/09 03:14:41 1.17
@@ -359,13 +359,30 @@
log( "Bytes: " + new String( bytes, start, len ));
do {
+ boolean noEq=false;
+ int valStart=-1;
+ int valEnd=-1;
+
int nameStart=pos;
int nameEnd=ByteChunk.indexOf(bytes, nameStart, end, '=' );
- if( nameEnd== -1 ) nameEnd=end;
-
- int valStart=nameEnd+1;
- int valEnd=ByteChunk.indexOf(bytes, valStart, end, '&');
- if( valEnd== -1 ) valEnd = (valStart < end) ? end : valStart;
+ // Workaround for a&b&c encoding
+ int nameEnd2=ByteChunk.indexOf(bytes, nameStart, end, '&' );
+ if( (nameEnd2!=-1 ) &&
+ ( nameEnd==-1 || nameEnd > nameEnd2) ) {
+ nameEnd=nameEnd2;
+ noEq=true;
+ valStart=nameEnd;
+ valEnd=nameEnd;
+ if( debug>0) log("no equal " + nameStart + " " + nameEnd + " " + new String(bytes, nameStart, nameEnd-nameStart) );
+ }
+ if( nameEnd== -1 )
+ nameEnd=end;
+
+ if( ! noEq ) {
+ valStart=nameEnd+1;
+ valEnd=ByteChunk.indexOf(bytes, valStart, end, '&');
+ if( valEnd== -1 ) valEnd = (valStart < end) ? end : valStart;
+ }
pos=valEnd+1;
@@ -381,7 +398,7 @@
try {
if( debug > 0 )
- log( tmpName + "= " + tmpValue);
+ log( "Found " + tmpName + "= " + tmpValue);
if( urlDec==null ) {
urlDec=new UDecoder();
@@ -390,7 +407,7 @@
urlDec.convert( tmpValue );
if( debug > 0 )
- log( tmpName + "= " + tmpValue);
+ log( "After url decoding " + tmpName + "= " + tmpValue);
addParam( tmpName.toString(), tmpValue.toString() );
} catch( IOException ex ) {
@@ -410,13 +427,29 @@
if( debug>0 )
log( "Chars: " + new String( chars, start, len ));
do {
+ boolean noEq=false;
int nameStart=pos;
+ int valStart=-1;
+ int valEnd=-1;
+
int nameEnd=CharChunk.indexOf(chars, nameStart, end, '=' );
+ int nameEnd2=CharChunk.indexOf(chars, nameStart, end, '&' );
+ if( (nameEnd2!=-1 ) &&
+ ( nameEnd==-1 || nameEnd > nameEnd2) ) {
+ nameEnd=nameEnd2;
+ noEq=true;
+ valStart=nameEnd;
+ valEnd=nameEnd;
+ if( debug>0) log("no equal " + nameStart + " " + nameEnd + " " + new String(chars, nameStart, nameEnd-nameStart) );
+ }
if( nameEnd== -1 ) nameEnd=end;
-
- int valStart=nameEnd+1;
- int valEnd=CharChunk.indexOf(chars, valStart, end, '&');
- if( valEnd== -1 ) valEnd = (valStart < end) ? end : valStart;
+
+ if( ! noEq ) {
+ valStart=nameEnd+1;
+ valEnd=CharChunk.indexOf(chars, valStart, end, '&');
+ if( valEnd== -1 ) valEnd = (valStart < end) ? end : valStart;
+ }
+
pos=valEnd+1;
if( nameEnd<=nameStart ) {
@@ -501,13 +534,30 @@
log("String: " + str );
do {
+ boolean noEq=false;
+ int valStart=-1;
+ int valEnd=-1;
+
int nameStart=pos;
int nameEnd=str.indexOf('=', nameStart );
+ int nameEnd2=str.indexOf('&', nameStart );
+ if( (nameEnd2!=-1 ) &&
+ ( nameEnd==-1 || nameEnd > nameEnd2) ) {
+ nameEnd=nameEnd2;
+ noEq=true;
+ valStart=nameEnd;
+ valEnd=nameEnd;
+ if( debug>0) log("no equal " + nameStart + " " + nameEnd + " " + str.substring(nameStart, nameEnd) );
+ }
+
if( nameEnd== -1 ) nameEnd=end;
- int valStart=nameEnd+1;
- int valEnd=str.indexOf('&', valStart);
- if( valEnd== -1 ) valEnd = (valStart < end) ? end : valStart;
+ if( ! noEq ) {
+ valStart=nameEnd+1;
+ valEnd=str.indexOf('&', valStart);
+ if( valEnd== -1 ) valEnd = (valStart < end) ? end : valStart;
+ }
+
pos=valEnd+1;
if( nameEnd<=nameStart ) {