You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by el...@apache.org on 2007/11/14 22:47:13 UTC
svn commit: r595078 - in /directory/shared/branches/bigbang/ldap/src:
main/java/org/apache/directory/shared/ldap/name/Rdn.java
main/java/org/apache/directory/shared/ldap/name/RdnParser.java
test/java/org/apache/directory/shared/ldap/name/RdnTest.java
Author: elecharny
Date: Wed Nov 14 13:47:05 2007
New Revision: 595078
URL: http://svn.apache.org/viewvc?rev=595078&view=rev
Log:
Fixed some bugs with escaped spaces in the middle of a RDN value, and another one with a truncated value due to an escaped space. Added Stefan Seelmann tests.
Modified:
directory/shared/branches/bigbang/ldap/src/main/java/org/apache/directory/shared/ldap/name/Rdn.java
directory/shared/branches/bigbang/ldap/src/main/java/org/apache/directory/shared/ldap/name/RdnParser.java
directory/shared/branches/bigbang/ldap/src/test/java/org/apache/directory/shared/ldap/name/RdnTest.java
Modified: directory/shared/branches/bigbang/ldap/src/main/java/org/apache/directory/shared/ldap/name/Rdn.java
URL: http://svn.apache.org/viewvc/directory/shared/branches/bigbang/ldap/src/main/java/org/apache/directory/shared/ldap/name/Rdn.java?rev=595078&r1=595077&r2=595078&view=diff
==============================================================================
--- directory/shared/branches/bigbang/ldap/src/main/java/org/apache/directory/shared/ldap/name/Rdn.java (original)
+++ directory/shared/branches/bigbang/ldap/src/main/java/org/apache/directory/shared/ldap/name/Rdn.java Wed Nov 14 13:47:05 2007
@@ -1125,8 +1125,32 @@
switch ( chars[i] )
{
case ' ':
- case '"':
+ if ( ( i > 0 ) && ( i < chars.length - 1 ) )
+ {
+ newChars[pos++] = chars[i];
+ }
+ else
+ {
+ newChars[pos++] = '\\';
+ newChars[pos++] = chars[i];
+ }
+
+ break;
+
case '#':
+ if ( i != 0 )
+ {
+ newChars[pos++] = chars[i];
+ }
+ else
+ {
+ newChars[pos++] = '\\';
+ newChars[pos++] = chars[i];
+ }
+
+ break;
+
+ case '"':
case '+':
case ',':
case ';':
Modified: directory/shared/branches/bigbang/ldap/src/main/java/org/apache/directory/shared/ldap/name/RdnParser.java
URL: http://svn.apache.org/viewvc/directory/shared/branches/bigbang/ldap/src/main/java/org/apache/directory/shared/ldap/name/RdnParser.java?rev=595078&r1=595077&r2=595078&view=diff
==============================================================================
--- directory/shared/branches/bigbang/ldap/src/main/java/org/apache/directory/shared/ldap/name/RdnParser.java (original)
+++ directory/shared/branches/bigbang/ldap/src/main/java/org/apache/directory/shared/ldap/name/RdnParser.java Wed Nov 14 13:47:05 2007
@@ -508,6 +508,12 @@
// <stringchar> <pairs-or-strings>
if ( ( nbChars = DNUtils.isStringChar( bytes, pos.end ) ) != DNUtils.PARSING_ERROR )
{
+ // If the char is not a space, we have to switch off the escapedSpace flag
+ if ( ( escapedSpace != -1 ) && ! StringTools.isCharASCII( bytes, pos.end, ' ' ) )
+ {
+ escapedSpace = -1;
+ }
+
// A special case : if we have some spaces before the
// '+' character,
// we MUST skip them.
Modified: directory/shared/branches/bigbang/ldap/src/test/java/org/apache/directory/shared/ldap/name/RdnTest.java
URL: http://svn.apache.org/viewvc/directory/shared/branches/bigbang/ldap/src/test/java/org/apache/directory/shared/ldap/name/RdnTest.java?rev=595078&r1=595077&r2=595078&view=diff
==============================================================================
--- directory/shared/branches/bigbang/ldap/src/test/java/org/apache/directory/shared/ldap/name/RdnTest.java (original)
+++ directory/shared/branches/bigbang/ldap/src/test/java/org/apache/directory/shared/ldap/name/RdnTest.java Wed Nov 14 13:47:05 2007
@@ -488,7 +488,7 @@
{
String res = Rdn.escapeValue( StringTools.getBytesUtf8( "\\#,+;<>=\" " ) );
- Assert.assertEquals( "\\\\\\#\\,\\+\\;\\<\\>\\=\\\"\\ ", res );
+ Assert.assertEquals( "\\\\#\\,\\+\\;\\<\\>\\=\\\"\\ ", res );
}
@@ -506,7 +506,7 @@
String res = Rdn.escapeValue( new byte[]
{ '\\', 0x00, '-', '+', '#', 0x7F, '-' } );
- Assert.assertEquals( "\\\\\\00-\\+\\#\\7F-", res );
+ Assert.assertEquals( "\\\\\\00-\\+#\\7F-", res );
}
public void testDIRSERVER_703() throws InvalidNameException
@@ -548,4 +548,68 @@
assertFalse( iterator.hasNext() );
}
+
+ public void testRdnWithSpaces() throws InvalidNameException
+ {
+ Rdn rdn = new Rdn( "cn=a\\ b\\ c" );
+ assertEquals( "cn=a b c", rdn.toString() );
+ }
+
+ public void testEscapedSpaceInValue() throws InvalidNameException
+ {
+ Rdn rdn1 = new Rdn( "cn=a b c" );
+ Rdn rdn2 = new Rdn( "cn=a\\ b\\ c" );
+ assertEquals( "cn=a b c", rdn1.toString() );
+ assertEquals( "cn=a b c", rdn2.toString() );
+ assertTrue( rdn1.equals( rdn2 ) );
+
+ Rdn rdn3 = new Rdn( "cn=\\ a b c\\ " );
+ Rdn rdn4 = new Rdn( "cn=\\ a\\ b\\ c\\ " );
+ assertEquals( "cn=\\ a b c\\ ", rdn3.toString() );
+ assertEquals( "cn=\\ a b c\\ ", rdn4.toString() );
+ assertTrue( rdn3.equals( rdn4 ) );
+ }
+
+
+ public void testEscapedHashInValue() throws InvalidNameException
+ {
+ Rdn rdn1 = new Rdn( "cn=a#b#c" );
+ Rdn rdn2 = new Rdn( "cn=a\\#b\\#c" );
+ assertEquals( "cn=a#b#c", rdn1.toString() );
+ assertEquals( "cn=a#b#c", rdn2.toString() );
+ assertTrue( rdn1.equals( rdn2 ) );
+
+ Rdn rdn3 = new Rdn( "cn=\\#a#b#c\\#" );
+ Rdn rdn4 = new Rdn( "cn=\\#a\\#b\\#c\\#" );
+ assertEquals( "cn=\\#a#b#c#", rdn3.toString() );
+ assertEquals( "cn=\\#a#b#c#", rdn4.toString() );
+ assertTrue( rdn3.equals( rdn4 ) );
+ }
+
+
+ public void testEscapedAttributeValue() throws InvalidNameException
+ {
+ // space doesn't need to be escaped in the middle of a string
+ assertEquals( "a b", Rdn.escapeValue( "a b" ) );
+ assertEquals( "a b c", Rdn.escapeValue( "a b c" ) );
+ assertEquals( "a b c d", Rdn.escapeValue( "a b c d" ) );
+
+ // space must be escaped at the beginning and the end of a string
+ assertEquals( "\\ a b", Rdn.escapeValue( " a b" ) );
+ assertEquals( "a b\\ ", Rdn.escapeValue( "a b " ) );
+ assertEquals( "\\ a b\\ ", Rdn.escapeValue( " a b " ) );
+ assertEquals( "\\ a b \\ ", Rdn.escapeValue( " a b " ) );
+
+ // hash doesn't need to be escaped in the middle and the end of a string
+ assertEquals( "a#b", Rdn.escapeValue( "a#b" ) );
+ assertEquals( "a#b#", Rdn.escapeValue( "a#b#" ) );
+ assertEquals( "a#b#c", Rdn.escapeValue( "a#b#c" ) );
+ assertEquals( "a#b#c#", Rdn.escapeValue( "a#b#c#" ) );
+ assertEquals( "a#b#c#d", Rdn.escapeValue( "a#b#c#d" ) );
+ assertEquals( "a#b#c#d#", Rdn.escapeValue( "a#b#c#d#" ) );
+
+ // hash must be escaped at the beginning of a string
+ assertEquals( "\\#a#b", Rdn.escapeValue( "#a#b" ) );
+ assertEquals( "\\##a#b", Rdn.escapeValue( "##a#b" ) );
+ }
}