You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by gg...@apache.org on 2008/04/02 18:08:24 UTC

svn commit: r643953 - in /commons/proper/lang/trunk/src: java/org/apache/commons/lang/StringEscapeUtils.java test/org/apache/commons/lang/StringEscapeUtilsTest.java

Author: ggregory
Date: Wed Apr  2 09:08:21 2008
New Revision: 643953

URL: http://svn.apache.org/viewvc?rev=643953&view=rev
Log:
(LANG-421) StringEscapeUtils.escapeJava(String) escapes '/' characters

Modified:
    commons/proper/lang/trunk/src/java/org/apache/commons/lang/StringEscapeUtils.java
    commons/proper/lang/trunk/src/test/org/apache/commons/lang/StringEscapeUtilsTest.java

Modified: commons/proper/lang/trunk/src/java/org/apache/commons/lang/StringEscapeUtils.java
URL: http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/java/org/apache/commons/lang/StringEscapeUtils.java?rev=643953&r1=643952&r2=643953&view=diff
==============================================================================
--- commons/proper/lang/trunk/src/java/org/apache/commons/lang/StringEscapeUtils.java (original)
+++ commons/proper/lang/trunk/src/java/org/apache/commons/lang/StringEscapeUtils.java Wed Apr  2 09:08:21 2008
@@ -83,7 +83,7 @@
      * @return String with escaped values, <code>null</code> if null string input
      */
     public static String escapeJava(String str) {
-        return escapeJavaStyleString(str, false);
+        return escapeJavaStyleString(str, false, false);
     }
 
     /**
@@ -99,7 +99,7 @@
      * @throws IOException if error occurs on underlying Writer
      */
     public static void escapeJava(Writer out, String str) throws IOException {
-        escapeJavaStyleString(out, str, false);
+        escapeJavaStyleString(out, str, false, false);
     }
 
     /**
@@ -124,7 +124,7 @@
      * @return String with escaped values, <code>null</code> if null string input
      */
     public static String escapeJavaScript(String str) {
-        return escapeJavaStyleString(str, true);
+        return escapeJavaStyleString(str, true, true);
     }
 
     /**
@@ -140,7 +140,7 @@
      * @throws IOException if error occurs on underlying Writer
      **/
     public static void escapeJavaScript(Writer out, String str) throws IOException {
-        escapeJavaStyleString(out, str, true);
+        escapeJavaStyleString(out, str, true, true);
     }
 
     /**
@@ -148,15 +148,16 @@
      * 
      * @param str String to escape values in, may be null
      * @param escapeSingleQuotes escapes single quotes if <code>true</code>
+     * @param escapeForwardSlash TODO
      * @return the escaped string
      */
-    private static String escapeJavaStyleString(String str, boolean escapeSingleQuotes) {
+    private static String escapeJavaStyleString(String str, boolean escapeSingleQuotes, boolean escapeForwardSlash) {
         if (str == null) {
             return null;
         }
         try {
             StringWriter writer = new StringWriter(str.length() * 2);
-            escapeJavaStyleString(writer, str, escapeSingleQuotes);
+            escapeJavaStyleString(writer, str, escapeSingleQuotes, escapeForwardSlash);
             return writer.toString();
         } catch (IOException ioe) {
             // this should never ever happen while writing to a StringWriter
@@ -171,9 +172,11 @@
      * @param out write to receieve the escaped string
      * @param str String to escape values in, may be null
      * @param escapeSingleQuote escapes single quotes if <code>true</code>
+     * @param escapeForwardSlash TODO
      * @throws IOException if an IOException occurs
      */
-    private static void escapeJavaStyleString(Writer out, String str, boolean escapeSingleQuote) throws IOException {
+    private static void escapeJavaStyleString(Writer out, String str, boolean escapeSingleQuote,
+            boolean escapeForwardSlash) throws IOException {
         if (out == null) {
             throw new IllegalArgumentException("The Writer must not be null");
         }
@@ -194,23 +197,23 @@
                 out.write("\\u00" + hex(ch));
             } else if (ch < 32) {
                 switch (ch) {
-                    case '\b':
+                    case '\b' :
                         out.write('\\');
                         out.write('b');
                         break;
-                    case '\n':
+                    case '\n' :
                         out.write('\\');
                         out.write('n');
                         break;
-                    case '\t':
+                    case '\t' :
                         out.write('\\');
                         out.write('t');
                         break;
-                    case '\f':
+                    case '\f' :
                         out.write('\\');
                         out.write('f');
                         break;
-                    case '\r':
+                    case '\r' :
                         out.write('\\');
                         out.write('r');
                         break;
@@ -224,22 +227,24 @@
                 }
             } else {
                 switch (ch) {
-                    case '\'':
+                    case '\'' :
                         if (escapeSingleQuote) {
-                          out.write('\\');
+                            out.write('\\');
                         }
                         out.write('\'');
                         break;
-                    case '"':
+                    case '"' :
                         out.write('\\');
                         out.write('"');
                         break;
-                    case '\\':
+                    case '\\' :
                         out.write('\\');
                         out.write('\\');
                         break;
-                    case '/':
-                        out.write('\\');
+                    case '/' :
+                        if (escapeForwardSlash) {
+                            out.write('\\');
+                        }
                         out.write('/');
                         break;
                     default :

Modified: commons/proper/lang/trunk/src/test/org/apache/commons/lang/StringEscapeUtilsTest.java
URL: http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/test/org/apache/commons/lang/StringEscapeUtilsTest.java?rev=643953&r1=643952&r2=643953&view=diff
==============================================================================
--- commons/proper/lang/trunk/src/test/org/apache/commons/lang/StringEscapeUtilsTest.java (original)
+++ commons/proper/lang/trunk/src/test/org/apache/commons/lang/StringEscapeUtilsTest.java Wed Apr  2 09:08:21 2008
@@ -97,6 +97,22 @@
                 "\uABCD\u1234\u012C");
     }
 
+    /**
+     * https://issues.apache.org/jira/browse/LANG-421
+     */
+    public void testEscapeJavaWithSlash() {
+        final String input = "String with a slash (/) in it";
+
+        final String expected = input;
+        final String actual = StringEscapeUtils.escapeJava(input);
+
+        /**
+         * In 2.4 StringEscapeUtils.escapeJava(String) escapes '/' characters, which are not a valid character to escape
+         * in a Java string.
+         */
+        assertEquals(expected, actual);
+    }
+    
     private void assertEscapeJava(String escaped, String original) throws IOException {
         assertEscapeJava(null, escaped, original);
     }