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