LdapEncoder Base64 newlines should start with " "

Fixes gh-413
This commit is contained in:
Rob Winch
2016-09-30 16:46:17 -05:00
parent e970111a17
commit 1e542f3381
3 changed files with 37 additions and 2 deletions

View File

@@ -258,6 +258,7 @@ public final class LdapEncoder {
if ((i + 1) % RFC2849_MAX_BASE64_CHARS_PER_LINE == 0) {
sb.append('\n');
sb.append(' ');
}
}
@@ -283,6 +284,9 @@ public final class LdapEncoder {
char c = val.charAt(i);
if(c == '\n'){
if(i + 1 < len && val.charAt(i + 1) == ' ') {
i++;
}
continue;
}

View File

@@ -57,4 +57,35 @@ public class LdapEncoderTest {
LdapEncoder.nameDecode("\\");
}
// gh-413
@Test
public void printBase64WhenReallyLongThenNewLineStartsWithSpace() throws Exception {
String toBase64Encode = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
String expected = "YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWjAxMjM0\n NTY3ODk=";
String actual = LdapEncoder.printBase64Binary(toBase64Encode.getBytes("UTF-8"));
assertThat(actual).isEqualTo(expected);
}
// gh-413
@Test
public void parseBase64BinaryWhenReallyLongThenRemovesNewlineAndSpace() {
String toParse = "YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWjAxMjM0\n NTY3ODk=";
String expected = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
String actual = new String(LdapEncoder.parseBase64Binary(toParse));
assertThat(actual).isEqualTo(expected);
}
@Test
public void parseBase64BinaryWhenReallyLongThenRemovesNewlineWithNoSpaceForPassivity() {
String toParse = "YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWjAxMjM0\nNTY3ODk=";
String expected = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
String actual = new String(LdapEncoder.parseBase64Binary(toParse));
assertThat(actual).isEqualTo(expected);
}
}

View File

@@ -23,8 +23,8 @@ dn: cn=Gern Jensen,ou=Product Testing,dc=airius,dc=com
telephonenumber: +1 408 555 1212
uid: gernj
description:: V2hhdCBhIGNhcmVmdWwgcmVhZGVyIHlvdSBhcmUhICBUaGlzIHZhbHVlIGlzIGJhc2UtNjQtZW5j
b2RlZCBiZWNhdXNlIGl0IGhhcyBhIGNvbnRyb2wgY2hhcmFjdGVyIGluIGl0IChhIENSKS4NICBC
eSB0aGUgd2F5LCB5b3Ugc2hvdWxkIHJlYWxseSBnZXQgb3V0IG1vcmUu
b2RlZCBiZWNhdXNlIGl0IGhhcyBhIGNvbnRyb2wgY2hhcmFjdGVyIGluIGl0IChhIENSKS4NICBC
eSB0aGUgd2F5LCB5b3Ugc2hvdWxkIHJlYWxseSBnZXQgb3V0IG1vcmUu
objectclass: top
objectclass: person
objectclass: organizationalPerson