sandygao 2002/09/04 08:54:04 Modified: java/src/org/apache/xerces/impl XMLEntityManager.java Log: Escaping more ASCII characters that are not allowed in URI. Revision Changes Path 1.39 +17 -21 xml-xerces/java/src/org/apache/xerces/impl/XMLEntityManager.java Index: XMLEntityManager.java =================================================================== RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/XMLEntityManager.java,v retrieving revision 1.38 retrieving revision 1.39 diff -u -r1.38 -r1.39 --- XMLEntityManager.java 4 Sep 2002 01:32:50 -0000 1.38 +++ XMLEntityManager.java 4 Sep 2002 15:54:03 -0000 1.39 @@ -1156,24 +1156,16 @@ gNeedEscaping[0x7f] = true; gAfterEscaping1[0x7f] = '7'; gAfterEscaping2[0x7f] = 'F'; - gNeedEscaping[' '] = true; - gAfterEscaping1[' '] = hexChs[' '/16]; - gAfterEscaping2[' '] = hexChs[' '%16]; - gNeedEscaping['<'] = true; - gAfterEscaping1['<'] = hexChs['<'/16]; - gAfterEscaping2['<'] = hexChs['<'%16]; - gNeedEscaping['>'] = true; - gAfterEscaping1['>'] = hexChs['>'/16]; - gAfterEscaping2['>'] = hexChs['>'%16]; - gNeedEscaping['#'] = true; - gAfterEscaping1['#'] = hexChs['#'/16]; - gAfterEscaping2['#'] = hexChs['#'%16]; - gNeedEscaping['%'] = true; - gAfterEscaping1['%'] = hexChs['%'/16]; - gAfterEscaping2['%'] = hexChs['%'%16]; - gNeedEscaping['"'] = true; - gAfterEscaping1['"'] = hexChs['"'/16]; - gAfterEscaping2['"'] = hexChs['"'%16]; + char[] escChs = {' ', '<', '>', '#', '%', '"', '"', '}', + '|', '\\', '^', '~', '[', ']', '`'}; + int len = escChs.length; + char ch; + for (int i = 0; i < len; i++) { + ch = escChs[i]; + gNeedEscaping[ch] = true; + gAfterEscaping1[ch] = hexChs[ch/16]; + gAfterEscaping2[ch] = hexChs[ch%16]; + } } // To escape the "user.dir" system property, by using %HH to represent // special ASCII characters: 0x00~0x1F, 0x7F, ' ', '<', '>', '#', '%' @@ -1197,13 +1189,17 @@ gUserDir = userDir; int len = userDir.length(); StringBuffer buffer = new StringBuffer(len*3); - char ch; + char ch, separator = java.io.File.separatorChar; boolean escaped = false; // for each character in the property value, check whether it // needs escaping. for (int i = 0; i < len; i++) { ch = userDir.charAt(i); - if (ch < 128 && gNeedEscaping[ch]) { + if (ch == separator && ch != '/') { + buffer.append('/'); + escaped = true; + } + else if (ch < 128 && gNeedEscaping[ch]) { buffer.append('%'); buffer.append(gAfterEscaping1[ch]); buffer.append(gAfterEscaping2[ch]);
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]