From 1e542f33815a910f60b65a3df07ebf7626aa1690 Mon Sep 17 00:00:00 2001 From: Rob Winch Date: Fri, 30 Sep 2016 16:46:17 -0500 Subject: [PATCH] LdapEncoder Base64 newlines should start with " " Fixes gh-413 --- .../ldap/support/LdapEncoder.java | 4 +++ .../ldap/support/LdapEncoderTest.java | 31 +++++++++++++++++++ .../src/test/resources/expectedOutput.ldif | 4 +-- 3 files changed, 37 insertions(+), 2 deletions(-) diff --git a/core/src/main/java/org/springframework/ldap/support/LdapEncoder.java b/core/src/main/java/org/springframework/ldap/support/LdapEncoder.java index 62b3e258..d3d6c25d 100644 --- a/core/src/main/java/org/springframework/ldap/support/LdapEncoder.java +++ b/core/src/main/java/org/springframework/ldap/support/LdapEncoder.java @@ -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; } diff --git a/core/src/test/java/org/springframework/ldap/support/LdapEncoderTest.java b/core/src/test/java/org/springframework/ldap/support/LdapEncoderTest.java index d270a299..454a7d93 100644 --- a/core/src/test/java/org/springframework/ldap/support/LdapEncoderTest.java +++ b/core/src/test/java/org/springframework/ldap/support/LdapEncoderTest.java @@ -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); + } } diff --git a/ldif/ldif-batch/src/test/resources/expectedOutput.ldif b/ldif/ldif-batch/src/test/resources/expectedOutput.ldif index 1170dff2..29b008ac 100644 --- a/ldif/ldif-batch/src/test/resources/expectedOutput.ldif +++ b/ldif/ldif-batch/src/test/resources/expectedOutput.ldif @@ -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