marcsaeg 2003/07/01 14:07:43
Modified: src/share/org/apache/tomcat/util Tag: tomcat_32
RequestUtil.java
Log:
Several performance improvements.
Revision Changes Path
No revision
No revision
1.14.2.9 +38 -35
jakarta-tomcat/src/share/org/apache/tomcat/util/Attic/RequestUtil.java
Index: RequestUtil.java
===================================================================
RCS file:
/home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/util/Attic/RequestUtil.java,v
retrieving revision 1.14.2.8
retrieving revision 1.14.2.9
diff -u -r1.14.2.8 -r1.14.2.9
--- RequestUtil.java 5 Oct 2001 21:03:54 -0000 1.14.2.8
+++ RequestUtil.java 1 Jul 2003 21:07:43 -0000 1.14.2.9
@@ -303,9 +303,10 @@
while (strPos < strLen) {
int laPos; // lookahead position
+ char[] ca = str.toCharArray();
// look ahead to next URLencoded metacharacter, if any
for (laPos = strPos; laPos < strLen; laPos++) {
- char laChar = str.charAt(laPos);
+ char laChar = ca[laPos];
if ((laChar == '+') || (laChar == '%')) {
break;
}
@@ -313,7 +314,7 @@
// if there were non-metacharacters, copy them all as a block
if (laPos > strPos) {
- dec.append(str.substring(strPos,laPos));
+ dec.append(ca, strPos, laPos);
strPos = laPos;
}
@@ -331,7 +332,7 @@
} else if (metaChar == '%') {
char c = (char) Integer.parseInt(str.substring(strPos + 1, strPos +
3), 16);
if(c == '/' || c == '%' || c=='.' || c == '\\' || c == '\0')
- dec.append(str.substring(strPos, strPos+3));
+ dec.append(ca, strPos, strPos+3);
else
dec.append(c);
strPos += 3;
@@ -341,40 +342,42 @@
return dec.toString();
}
- public static String unUrlDecode(String data) {
- StringBuffer buf = new StringBuffer();
- for (int i = 0; i < data.length(); i++) {
- char c = data.charAt(i);
- switch (c) {
- case '+':
- buf.append(' ');
- break;
- case '%':
- // XXX XXX
- try {
- buf.append((char) Integer.parseInt(data.substring(i+1,
- i+3), 16));
- i += 2;
- } catch (NumberFormatException e) {
+ public static String unUrlDecode(String data)
+ {
+ StringBuffer buf = new StringBuffer(data.length());
+ char ca[] = data.toCharArray();
+ for (int i = 0; i < data.length(); i++) {
+ char c = ca[i];
+ switch (c) {
+ case '+':
+ buf.append(' ');
+ break;
+ case '%':
+ // XXX XXX
+ try {
+ buf.append((char) Integer.parseInt(data.substring(i+1,
+ i+3), 16));
+ i += 2;
+ } catch (NumberFormatException e) {
String msg = "Decode error ";
- // XXX no need to add sm just for that
- // sm.getString("serverRequest.urlDecode.nfe", data);
+ // XXX no need to add sm just for that
+ // sm.getString("serverRequest.urlDecode.nfe", data);
+
+ throw new IllegalArgumentException(msg);
+ } catch (StringIndexOutOfBoundsException e) {
+ String rest = data.substring(i);
+ buf.append(rest);
+ if (rest.length()==2)
+ i++;
+ }
- throw new IllegalArgumentException(msg);
- } catch (StringIndexOutOfBoundsException e) {
- String rest = data.substring(i);
- buf.append(rest);
- if (rest.length()==2)
- i++;
- }
-
- break;
- default:
- buf.append(c);
- break;
- }
- }
- return buf.toString();
+ break;
+ default:
+ buf.append(c);
+ break;
+ }
+ }
+ return buf.toString();
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]