From 857de821105b9b5ba0ecb221d2a6b9fb5992059a Mon Sep 17 00:00:00 2001
From: Matthew Swift <matthew.swift@forgerock.com>
Date: Mon, 11 Apr 2016 15:58:32 +0000
Subject: [PATCH] OPENDJ-2858 Allow first attribute in LDIF change records to be empty

---
 opendj-core/src/main/java/org/forgerock/opendj/ldif/AbstractLDIFReader.java             |    5 +++--
 opendj-core/src/test/java/org/forgerock/opendj/ldif/LDIFChangeRecordReaderTestCase.java |   23 +++++++++++++++++++++++
 opendj-core/src/main/java/org/forgerock/opendj/ldif/LDIFChangeRecordReader.java         |    3 ++-
 3 files changed, 28 insertions(+), 3 deletions(-)

diff --git a/opendj-core/src/main/java/org/forgerock/opendj/ldif/AbstractLDIFReader.java b/opendj-core/src/main/java/org/forgerock/opendj/ldif/AbstractLDIFReader.java
index 9e861ef..86038d1 100644
--- a/opendj-core/src/main/java/org/forgerock/opendj/ldif/AbstractLDIFReader.java
+++ b/opendj-core/src/main/java/org/forgerock/opendj/ldif/AbstractLDIFReader.java
@@ -13,6 +13,7 @@
  *
  * Copyright 2009-2010 Sun Microsystems, Inc.
  * Portions copyright 2011-2015 ForgeRock AS.
+ * Portions copyright 2016 Matthew Stevenson
  */
 
 package org.forgerock.opendj.ldif;
@@ -637,11 +638,11 @@
 
         /*
          * Look at the character immediately after the colon. If there is none,
-         * then no value was specified. Throw an exception
+         * then no value was specified. Then return an empty value.
          */
         final int length = ldifLine.length();
         if (colonPos == length - 1) {
-            pair.key = null;
+            pair.value = "";
             return ldifLine;
         }
 
diff --git a/opendj-core/src/main/java/org/forgerock/opendj/ldif/LDIFChangeRecordReader.java b/opendj-core/src/main/java/org/forgerock/opendj/ldif/LDIFChangeRecordReader.java
index 0ba1cb1..ed435b9 100644
--- a/opendj-core/src/main/java/org/forgerock/opendj/ldif/LDIFChangeRecordReader.java
+++ b/opendj-core/src/main/java/org/forgerock/opendj/ldif/LDIFChangeRecordReader.java
@@ -13,6 +13,7 @@
  *
  * Copyright 2009-2010 Sun Microsystems, Inc.
  * Portions copyright 2011-2016 ForgeRock AS.
+ * Portions copyright 2016 Matthew Stevenson
  */
 package org.forgerock.opendj.ldif;
 
@@ -719,7 +720,7 @@
         // Parse the newsuperior if present.
         if (record.iterator.hasNext()) {
             ldifLine = readLDIFRecordKeyValuePair(record, pair, true);
-            if (pair.key == null || !"newsuperior".equals(toLowerCase(pair.key))) {
+            if (pair.key == null || !"newsuperior".equals(toLowerCase(pair.key)) || "".equals(pair.value)) {
                 throw DecodeException.error(
                         ERR_LDIF_MALFORMED_NEW_SUPERIOR.get(record.lineNumber, entryDN, ldifLine));
             }
diff --git a/opendj-core/src/test/java/org/forgerock/opendj/ldif/LDIFChangeRecordReaderTestCase.java b/opendj-core/src/test/java/org/forgerock/opendj/ldif/LDIFChangeRecordReaderTestCase.java
index f6b75c0..17eb5dc 100644
--- a/opendj-core/src/test/java/org/forgerock/opendj/ldif/LDIFChangeRecordReaderTestCase.java
+++ b/opendj-core/src/test/java/org/forgerock/opendj/ldif/LDIFChangeRecordReaderTestCase.java
@@ -13,6 +13,7 @@
  *
  * Copyright 2011-2016 ForgeRock AS.
  * Portions Copyright 2014 Manuel Gaupp
+ * Portions copyright 2016 Matthew Stevenson
  */
 
 package org.forgerock.opendj.ldif;
@@ -2486,4 +2487,26 @@
         assertThat(addRequest.getAttributeCount()).isEqualTo(10);
     }
 
+    /**
+     * Try to read a LDIF record with a empty first attribute
+     */
+    @Test
+    public void testValueOfLDIFRecordEmptyFirstAttrLDIF() {
+
+        // @formatter:off
+        LDIFChangeRecordReader.valueOfLDIFChangeRecord(
+                "version: 1",
+                "# Add a new entry",
+                "dn: cn=Fiona Jensen, ou=Marketing, dc=airius, dc=com",
+                "description:",
+                "objectclass: top",
+                "objectclass: person",
+                "objectclass: organizationalPerson",
+                "cn: Fiona Jensen",
+                "sn: Jensen",
+                "uid: fiona",
+                "telephonenumber: +1 408 555 1212"
+        );
+        // @formatter:on
+    }
 }

--
Gitblit v1.10.0