You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by to...@apache.org on 2007/06/20 05:13:40 UTC

svn commit: r548905 - in /harmony/enhanced/classlib/trunk/modules/jndi/src: main/java/org/apache/harmony/jndi/internal/parser/LdapRdnParser.java test/java/org/apache/harmony/jndi/tests/javax/naming/ldap/RdnTest.java

Author: tonywu
Date: Tue Jun 19 20:13:39 2007
New Revision: 548905

URL: http://svn.apache.org/viewvc?view=rev&rev=548905
Log:
Apply patch HARMONY-4229 ([classlib][jndi] Class Rdn.unescapeValue() has some failures)

Modified:
    harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/org/apache/harmony/jndi/internal/parser/LdapRdnParser.java
    harmony/enhanced/classlib/trunk/modules/jndi/src/test/java/org/apache/harmony/jndi/tests/javax/naming/ldap/RdnTest.java

Modified: harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/org/apache/harmony/jndi/internal/parser/LdapRdnParser.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/org/apache/harmony/jndi/internal/parser/LdapRdnParser.java?view=diff&rev=548905&r1=548904&r2=548905
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/org/apache/harmony/jndi/internal/parser/LdapRdnParser.java (original)
+++ harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/org/apache/harmony/jndi/internal/parser/LdapRdnParser.java Tue Jun 19 20:13:39 2007
@@ -156,7 +156,27 @@
         } else if (val.startsWith("#")) {
             return getByteFromHexString(val);
         } else {
-            char[] chars = new String(val.trim()).toCharArray();
+            String tmpVal = val.trim();
+            if (tmpVal.length() > 0 && tmpVal.charAt(0) == '\"'
+                    && tmpVal.charAt(tmpVal.length() - 1) == '\"') {
+                if (tmpVal.length() == 1) {
+                    val = "";
+                } else {
+                    val = tmpVal.substring(1, tmpVal.length() - 1);
+                }
+            }
+            char[] chars;
+            int pos = val.length() - 1;
+            boolean trailingSpace = false;
+            while (pos >= 0 && val.charAt(pos) == ' ') {
+                trailingSpace = true;
+                pos--;
+            }
+            if (pos >= 0 && val.charAt(pos) == '\\' && trailingSpace) {
+                chars = (new String(val.trim()) + " ").toCharArray();
+            } else {
+                chars = new String(val.trim()).toCharArray();
+            }
             return getUnEscapedValues(chars);
         }
 
@@ -188,6 +208,11 @@
                     if (chars[i + 1] == ' ') {
                         continue;
                     }
+                    if (chars[i + 1] == '\\') {
+                        sb.append('\\');
+                        i = i + 1;
+                        continue;
+                    }
                     if (!isSpecialChar(chars, i + 1)
                             && !isSpecialChar(chars, i + 2)) {
                         try {
@@ -203,6 +228,7 @@
                         }
                     }
                 } catch (ArrayIndexOutOfBoundsException e) {
+                    sb.append(chars[i]);
                 }
             }
         }

Modified: harmony/enhanced/classlib/trunk/modules/jndi/src/test/java/org/apache/harmony/jndi/tests/javax/naming/ldap/RdnTest.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/jndi/src/test/java/org/apache/harmony/jndi/tests/javax/naming/ldap/RdnTest.java?view=diff&rev=548905&r1=548904&r2=548905
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/jndi/src/test/java/org/apache/harmony/jndi/tests/javax/naming/ldap/RdnTest.java (original)
+++ harmony/enhanced/classlib/trunk/modules/jndi/src/test/java/org/apache/harmony/jndi/tests/javax/naming/ldap/RdnTest.java Tue Jun 19 20:13:39 2007
@@ -2104,6 +2104,34 @@
         } catch (IllegalArgumentException e) {}
     }
 
+    /**
+     * <p>
+     * Test method for 'javax.naming.ldap.Rdn.unescapeValue(String)'
+     * </p>
+     * <p>
+     * Here we are testing if a given attribute value string formated, returns
+     * the unformated value. In this case we are testing the special character
+     * "#" in the form "#GOFJMOII".
+     * </p>
+     * <p>
+     * The expected result is an exception.
+     * </p>
+     */
+    public void testUnescapeValue011() {
+        try {
+            assertEquals("te st  ", Rdn.unescapeValue("te st \\  "));
+            assertEquals("te\\st", Rdn.unescapeValue("te\\\\st"));
+            assertEquals("test", Rdn.unescapeValue("\"test\""));
+            assertEquals("\"test", Rdn.unescapeValue("\"test"));
+            assertEquals("\"te\"st", Rdn.unescapeValue("\"te\"st"));
+            assertEquals("te\"st", Rdn.unescapeValue("\"te\"st\""));
+            assertEquals("test", Rdn.unescapeValue(" \"test\"  "));
+            assertEquals("\"test\"  ", Rdn.unescapeValue(" \"test\" \\ "));
+            assertEquals("te1st\\", Rdn.unescapeValue(" \"te\\31st\\\" "));
+        } catch (IllegalArgumentException e) {
+        }
+    }
+
     public void testSerializationCompatibility() throws Exception{
         Rdn object = new Rdn("t=\\20\\ te\\ s\\20t\\20\\20 + t2 = test1\\20\\ ");
         SerializationTest.verifyGolden(this, object);