From b148c3e2f3a34827d3ccae385f110ba906b6c20c Mon Sep 17 00:00:00 2001
From: Matthew Swift <matthew.swift@forgerock.com>
Date: Wed, 08 Jan 2014 17:51:34 +0000
Subject: [PATCH] Minor ByteString changes:
---
opendj-core/src/main/java/org/forgerock/opendj/ldap/AVA.java | 6
opendj-core/src/test/java/org/forgerock/opendj/ldap/ByteStringTestCase.java | 7 +
opendj-core/src/main/java/com/forgerock/opendj/util/StaticUtils.java | 144 ----------------------------
opendj-core/src/main/java/org/forgerock/opendj/ldap/ByteString.java | 137 ++++++++++++++++++++++++++-
4 files changed, 141 insertions(+), 153 deletions(-)
diff --git a/opendj-core/src/main/java/com/forgerock/opendj/util/StaticUtils.java b/opendj-core/src/main/java/com/forgerock/opendj/util/StaticUtils.java
index 46c9ed1..7ffb64d 100644
--- a/opendj-core/src/main/java/com/forgerock/opendj/util/StaticUtils.java
+++ b/opendj-core/src/main/java/com/forgerock/opendj/util/StaticUtils.java
@@ -22,12 +22,11 @@
*
*
* Copyright 2009-2010 Sun Microsystems, Inc.
- * Portions copyright 2011-2013 ForgeRock AS
+ * Portions copyright 2011-2014 ForgeRock AS
*/
package com.forgerock.opendj.util;
-import static com.forgerock.opendj.ldap.CoreMessages.ERR_HEX_DECODE_INVALID_CHARACTER;
import java.io.Closeable;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
@@ -35,7 +34,6 @@
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.charset.Charset;
-import java.text.ParseException;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Collection;
@@ -1527,146 +1525,6 @@
}
/**
- * Converts the provided pair of characters to a byte.
- *
- * @param c1
- * The first hexadecimal character.
- * @param c2
- * The second hexadecimal character.
- * @return The byte containing the binary representation of the provided hex
- * characters.
- * @throws ParseException
- * If the provided string contains invalid hexadecimal digits or
- * does not contain an even number of digits.
- */
- public static byte hexToByte(final char c1, final char c2) throws ParseException {
- byte b;
- switch (c1) {
- case '0':
- b = 0x00;
- break;
- case '1':
- b = 0x10;
- break;
- case '2':
- b = 0x20;
- break;
- case '3':
- b = 0x30;
- break;
- case '4':
- b = 0x40;
- break;
- case '5':
- b = 0x50;
- break;
- case '6':
- b = 0x60;
- break;
- case '7':
- b = 0x70;
- break;
- case '8':
- b = (byte) 0x80;
- break;
- case '9':
- b = (byte) 0x90;
- break;
- case 'A':
- case 'a':
- b = (byte) 0xA0;
- break;
- case 'B':
- case 'b':
- b = (byte) 0xB0;
- break;
- case 'C':
- case 'c':
- b = (byte) 0xC0;
- break;
- case 'D':
- case 'd':
- b = (byte) 0xD0;
- break;
- case 'E':
- case 'e':
- b = (byte) 0xE0;
- break;
- case 'F':
- case 'f':
- b = (byte) 0xF0;
- break;
- default:
- final LocalizableMessage message =
- ERR_HEX_DECODE_INVALID_CHARACTER.get(new String(new char[] { c1, c2 }), c1);
- throw new ParseException(message.toString(), 0);
- }
-
- switch (c2) {
- case '0':
- // No action required.
- break;
- case '1':
- b |= 0x01;
- break;
- case '2':
- b |= 0x02;
- break;
- case '3':
- b |= 0x03;
- break;
- case '4':
- b |= 0x04;
- break;
- case '5':
- b |= 0x05;
- break;
- case '6':
- b |= 0x06;
- break;
- case '7':
- b |= 0x07;
- break;
- case '8':
- b |= 0x08;
- break;
- case '9':
- b |= 0x09;
- break;
- case 'A':
- case 'a':
- b |= 0x0A;
- break;
- case 'B':
- case 'b':
- b |= 0x0B;
- break;
- case 'C':
- case 'c':
- b |= 0x0C;
- break;
- case 'D':
- case 'd':
- b |= 0x0D;
- break;
- case 'E':
- case 'e':
- b |= 0x0E;
- break;
- case 'F':
- case 'f':
- b |= 0x0F;
- break;
- default:
- final LocalizableMessage message =
- ERR_HEX_DECODE_INVALID_CHARACTER.get(new String(new char[] { c1, c2 }), c1);
- throw new ParseException(message.toString(), 0);
- }
-
- return b;
- }
-
- /**
* Indicates whether the provided character is an ASCII alphabetic
* character.
*
diff --git a/opendj-core/src/main/java/org/forgerock/opendj/ldap/AVA.java b/opendj-core/src/main/java/org/forgerock/opendj/ldap/AVA.java
index 5e55e95..b4b3514 100644
--- a/opendj-core/src/main/java/org/forgerock/opendj/ldap/AVA.java
+++ b/opendj-core/src/main/java/org/forgerock/opendj/ldap/AVA.java
@@ -532,10 +532,10 @@
try {
reader.reset();
return ByteString.valueOfHex(reader.read(length));
- } catch (final Exception e) {
+ } catch (final LocalizedIllegalArgumentException e) {
final LocalizableMessage message =
- ERR_ATTR_SYNTAX_DN_ATTR_VALUE_DECODE_FAILURE.get(reader.getString(), String
- .valueOf(e));
+ ERR_ATTR_SYNTAX_DN_ATTR_VALUE_DECODE_FAILURE.get(reader.getString(), e
+ .getMessageObject());
throw new LocalizedIllegalArgumentException(message);
}
} else if (c == '"') {
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 34cf27a..2afaec4 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-2013 ForgeRock AS
+ * Portions copyright 2011-2014 ForgeRock AS
*/
package org.forgerock.opendj.ldap;
@@ -35,7 +35,6 @@
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.charset.Charset;
-import java.text.ParseException;
import java.util.Arrays;
import org.forgerock.i18n.LocalizableMessage;
@@ -170,11 +169,11 @@
* The hexadecimal string to convert to a byte array.
* @return The byte string containing the binary representation of the
* provided hex string.
- * @throws java.text.ParseException
+ * @throws LocalizedIllegalArgumentException
* If the provided string contains invalid hexadecimal digits or
* does not contain an even number of digits.
*/
- public static ByteString valueOfHex(final String hexString) throws ParseException {
+ public static ByteString valueOfHex(final String hexString) {
byte[] bytes = null;
int length = 0;
if (hexString == null || (length = hexString.length()) == 0) {
@@ -182,12 +181,13 @@
} else {
if (length % 2 != 0) {
final LocalizableMessage message = ERR_HEX_DECODE_INVALID_LENGTH.get(hexString);
- throw new ParseException(message.toString(), 0);
+ throw new LocalizedIllegalArgumentException(message);
}
final int arrayLength = length / 2;
bytes = new byte[arrayLength];
for (int i = 0; i < arrayLength; i++) {
- bytes[i] = hexToByte(hexString.charAt(i * 2), hexString.charAt(i * 2 + 1));
+ bytes[i] =
+ hexToByte(hexString, hexString.charAt(i * 2), hexString.charAt(i * 2 + 1));
}
}
return valueOf(bytes);
@@ -408,6 +408,131 @@
return stringValue;
}
+ private static byte hexToByte(final String value, final char c1, final char c2) {
+ byte b;
+ switch (c1) {
+ case '0':
+ b = 0x00;
+ break;
+ case '1':
+ b = 0x10;
+ break;
+ case '2':
+ b = 0x20;
+ break;
+ case '3':
+ b = 0x30;
+ break;
+ case '4':
+ b = 0x40;
+ break;
+ case '5':
+ b = 0x50;
+ break;
+ case '6':
+ b = 0x60;
+ break;
+ case '7':
+ b = 0x70;
+ break;
+ case '8':
+ b = (byte) 0x80;
+ break;
+ case '9':
+ b = (byte) 0x90;
+ break;
+ case 'A':
+ case 'a':
+ b = (byte) 0xA0;
+ break;
+ case 'B':
+ case 'b':
+ b = (byte) 0xB0;
+ break;
+ case 'C':
+ case 'c':
+ b = (byte) 0xC0;
+ break;
+ case 'D':
+ case 'd':
+ b = (byte) 0xD0;
+ break;
+ case 'E':
+ case 'e':
+ b = (byte) 0xE0;
+ break;
+ case 'F':
+ case 'f':
+ b = (byte) 0xF0;
+ break;
+ default:
+ final LocalizableMessage message = ERR_HEX_DECODE_INVALID_CHARACTER.get(value, c1);
+ throw new LocalizedIllegalArgumentException(message);
+ }
+
+ switch (c2) {
+ case '0':
+ // No action required.
+ break;
+ case '1':
+ b |= 0x01;
+ break;
+ case '2':
+ b |= 0x02;
+ break;
+ case '3':
+ b |= 0x03;
+ break;
+ case '4':
+ b |= 0x04;
+ break;
+ case '5':
+ b |= 0x05;
+ break;
+ case '6':
+ b |= 0x06;
+ break;
+ case '7':
+ b |= 0x07;
+ break;
+ case '8':
+ b |= 0x08;
+ break;
+ case '9':
+ b |= 0x09;
+ break;
+ case 'A':
+ case 'a':
+ b |= 0x0A;
+ break;
+ case 'B':
+ case 'b':
+ b |= 0x0B;
+ break;
+ case 'C':
+ case 'c':
+ b |= 0x0C;
+ break;
+ case 'D':
+ case 'd':
+ b |= 0x0D;
+ break;
+ case 'E':
+ case 'e':
+ b |= 0x0E;
+ break;
+ case 'F':
+ case 'f':
+ b |= 0x0F;
+ break;
+ default:
+ final LocalizableMessage message = ERR_HEX_DECODE_INVALID_CHARACTER.get(value, c2);
+ throw new LocalizedIllegalArgumentException(message);
+ }
+
+ return b;
+ }
+
// These are package private so that compression and crypto
// functionality may directly access the fields.
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 a533892..1e22f9a 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
@@ -255,8 +255,13 @@
}
@Test
- public void testValueOfHex() throws Exception {
+ public void testValueOfHex() {
ByteString byteString = ByteString.valueOfHex("636E3D7465737476616C7565");
assertThat(byteString.toString()).isEqualTo("cn=testvalue");
}
+
+ @Test(expectedExceptions = LocalizedIllegalArgumentException.class)
+ public void testValueOfInvalidHex() {
+ ByteString.valueOfHex("636E3D746573x7476616C7565");
+ }
}
--
Gitblit v1.10.0