From d6b66772a5c1ad1403e9cfb3f96ef6abfb13f0b9 Mon Sep 17 00:00:00 2001
From: Fabio Pistolesi <fabio.pistolesi@forgerock.com>
Date: Fri, 20 May 2016 10:09:09 +0000
Subject: [PATCH] OPENDJ-3020 Fix some AttributeDescription related NPEs
---
opendj-core/src/test/java/org/forgerock/opendj/ldap/AttributeDescriptionTestCase.java | 4 ++++
opendj-core/src/main/java/org/forgerock/opendj/ldap/AttributeDescription.java | 20 ++++++++++++--------
2 files changed, 16 insertions(+), 8 deletions(-)
diff --git a/opendj-core/src/main/java/org/forgerock/opendj/ldap/AttributeDescription.java b/opendj-core/src/main/java/org/forgerock/opendj/ldap/AttributeDescription.java
index 754c654..93a69c6 100644
--- a/opendj-core/src/main/java/org/forgerock/opendj/ldap/AttributeDescription.java
+++ b/opendj-core/src/main/java/org/forgerock/opendj/ldap/AttributeDescription.java
@@ -853,7 +853,7 @@
}
cp = ASCIICharProp.valueOf(c);
- if (!cp.isKeyChar(allowMalformedNamesAndOptions)) {
+ if (cp == null || !cp.isKeyChar(allowMalformedNamesAndOptions)) {
final LocalizableMessage message =
ERR_ATTRIBUTE_DESCRIPTION_ILLEGAL_CHARACTER.get(attributeDescription,
c, i);
@@ -873,7 +873,7 @@
}
cp = ASCIICharProp.valueOf(c);
- if (c != '.' && !cp.isDigit()) {
+ if (cp == null || c != '.' && !cp.isDigit()) {
final LocalizableMessage message =
ERR_ATTRIBUTE_DESCRIPTION_ILLEGAL_CHARACTER.get(attributeDescription,
c, i);
@@ -934,7 +934,7 @@
}
cp = ASCIICharProp.valueOf(c);
- if (!cp.isKeyChar(allowMalformedNamesAndOptions)) {
+ if (cp == null || !cp.isKeyChar(allowMalformedNamesAndOptions)) {
final LocalizableMessage message =
ERR_ATTRIBUTE_DESCRIPTION_ILLEGAL_CHARACTER.get(attributeDescription, c, i);
throw new LocalizedIllegalArgumentException(message);
@@ -999,7 +999,7 @@
}
cp = ASCIICharProp.valueOf(c);
- if (!cp.isKeyChar(allowMalformedNamesAndOptions)) {
+ if (cp == null || !cp.isKeyChar(allowMalformedNamesAndOptions)) {
final LocalizableMessage message =
ERR_ATTRIBUTE_DESCRIPTION_ILLEGAL_CHARACTER.get(attributeDescription,
c, i);
@@ -1037,13 +1037,17 @@
i = skipTrailingWhiteSpace(attributeDescription, i + 1, length);
}
- options.add(option);
- normalizedOptions.add(normalizedOption);
+ if (normalizedOptions.add(normalizedOption)) {
+ options.add(option);
+ }
}
return new AttributeDescription(attributeDescription, oid, attributeType,
- new MultiOptionImpl(options.toArray(new String[options.size()]),
- normalizedOptions.toArray(new String[normalizedOptions.size()])));
+ normalizedOptions.size() > 1
+ ? new MultiOptionImpl(options.toArray(new String[options.size()]),
+ normalizedOptions.toArray(new String[normalizedOptions.size()]))
+ : new SingleOptionImpl(options.get(0), normalizedOptions.first())
+ );
}
private final String attributeDescription;
diff --git a/opendj-core/src/test/java/org/forgerock/opendj/ldap/AttributeDescriptionTestCase.java b/opendj-core/src/test/java/org/forgerock/opendj/ldap/AttributeDescriptionTestCase.java
index a2c061c..c6bc2b7 100644
--- a/opendj-core/src/test/java/org/forgerock/opendj/ldap/AttributeDescriptionTestCase.java
+++ b/opendj-core/src/test/java/org/forgerock/opendj/ldap/AttributeDescriptionTestCase.java
@@ -82,6 +82,8 @@
{ "cn;xxx;yyy", "cn;xxx", 1, true, false },
{ "cn;xxx;yyy", "cn;xxx;yyy", 0, true, true },
{ "cn;xxx;yyy", "cn;yyy;xxx", 0, true, true },
+ { "cn;a;a;a;a", "cn;a", 0, false, false},
+ { "cn;a;b;a", "cn;a;b", 0, false, false},
{ "cn", "cn;xxx;yyy", -1, false, true },
{ "cn;yyy", "cn;xxx;yyy", -1, false, true },
@@ -167,6 +169,8 @@
{ "cn;xxx;yyy;zzz", "cn", new String[] { "xxx", "yyy", "zzz" }, false },
{ "cn;zzz;YYY;xxx", "cn", new String[] { "zzz", "YYY", "xxx" }, false },
{ "CN;zzz;YYY;xxx", "CN", new String[] { "zzz", "YYY", "xxx" }, false },
+ { "cn;a;a;b", "cn", new String[] { "a", "b" }, false},
+ { "cn;a;a;a;a", "cn", new String[] { "a" }, false},
};
// @formatter:on
}
--
Gitblit v1.10.0