From 1d88ff472c4e058356ccd8d9336959fa6c917b78 Mon Sep 17 00:00:00 2001
From: Jean-Noel Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Tue, 17 Mar 2015 11:05:52 +0000
Subject: [PATCH] Fixed java.lang.NegativeArraySizeException in ByteString.toHexString().
---
opendj-core/src/test/java/org/forgerock/opendj/ldap/ByteStringTestCase.java | 2 ++
opendj-core/src/main/java/org/forgerock/opendj/ldap/ByteString.java | 11 ++++++++++-
opendj-core/src/main/java/org/forgerock/opendj/ldap/Base64.java | 6 +++++-
3 files changed, 17 insertions(+), 2 deletions(-)
diff --git a/opendj-core/src/main/java/org/forgerock/opendj/ldap/Base64.java b/opendj-core/src/main/java/org/forgerock/opendj/ldap/Base64.java
index 9872d23..4bfd72a 100755
--- a/opendj-core/src/main/java/org/forgerock/opendj/ldap/Base64.java
+++ b/opendj-core/src/main/java/org/forgerock/opendj/ldap/Base64.java
@@ -22,7 +22,7 @@
*
*
* Copyright 2006-2009 Sun Microsystems, Inc.
- * Portions copyright 2012 ForgeRock AS.
+ * Portions copyright 2012-2015 ForgeRock AS.
*/
package org.forgerock.opendj.ldap;
@@ -320,6 +320,10 @@
static String encode(final ByteSequence bytes) {
Reject.ifNull(bytes);
+ if (bytes.isEmpty()) {
+ return "";
+ }
+
final StringBuilder buffer = new StringBuilder(4 * bytes.length() / 3);
int pos = 0;
diff --git a/opendj-core/src/main/java/org/forgerock/opendj/ldap/ByteString.java b/opendj-core/src/main/java/org/forgerock/opendj/ldap/ByteString.java
index 508212f..ab13d24 100755
--- a/opendj-core/src/main/java/org/forgerock/opendj/ldap/ByteString.java
+++ b/opendj-core/src/main/java/org/forgerock/opendj/ldap/ByteString.java
@@ -22,7 +22,7 @@
*
*
* Copyright 2009-2010 Sun Microsystems, Inc.
- * Portions copyright 2011-2014 ForgeRock AS
+ * Portions copyright 2011-2015 ForgeRock AS
*/
package org.forgerock.opendj.ldap;
@@ -432,6 +432,9 @@
* @return The string representation of the byte array sub-sequence.
*/
static String toString(final byte[] b, final int offset, final int length) {
+ if (length == 0) {
+ return "";
+ }
try {
return new String(b, offset, length, "UTF-8");
} catch (final UnsupportedEncodingException e) {
@@ -756,6 +759,9 @@
* using hexadecimal characters.
*/
public String toHexString() {
+ if (isEmpty()) {
+ return "";
+ }
StringBuilder builder = new StringBuilder((length - 1) * 3 + 2);
builder.append(StaticUtils.byteToHex(buffer[offset]));
for (int i = 1; i < length; i++) {
@@ -773,6 +779,9 @@
* using percent + hexadecimal characters.
*/
public String toPercentHexString() {
+ if (isEmpty()) {
+ return "";
+ }
StringBuilder builder = new StringBuilder(length * 3);
for (int i = 0; i < length; i++) {
builder.append('%');
diff --git a/opendj-core/src/test/java/org/forgerock/opendj/ldap/ByteStringTestCase.java b/opendj-core/src/test/java/org/forgerock/opendj/ldap/ByteStringTestCase.java
index db287e6..fe5a9ee 100644
--- a/opendj-core/src/test/java/org/forgerock/opendj/ldap/ByteStringTestCase.java
+++ b/opendj-core/src/test/java/org/forgerock/opendj/ldap/ByteStringTestCase.java
@@ -267,6 +267,8 @@
public void testToHex() throws Exception {
ByteString byteString = new ByteStringBuilder().append("org=example").toByteString();
assertThat(byteString.toHexString()).isEqualTo("6F 72 67 3D 65 78 61 6D 70 6C 65");
+
+ assertThat(ByteString.empty().toHexString()).isEqualTo("");
}
@Test
--
Gitblit v1.10.0