From ccff1bc205722a94e386c3cfe44852ab55430886 Mon Sep 17 00:00:00 2001
From: abobrov <abobrov@localhost>
Date: Wed, 31 Dec 2008 13:55:37 +0000
Subject: [PATCH] - [Issue 3694]  ASN.1 package does incorrect BER encoding/decoding for negative integers.

---
 opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/asn1/TestASN1Long.java |   49 +++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 49 insertions(+), 0 deletions(-)

diff --git a/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/asn1/TestASN1Long.java b/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/asn1/TestASN1Long.java
index 97bec61..1a3b31a 100644
--- a/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/asn1/TestASN1Long.java
+++ b/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/asn1/TestASN1Long.java
@@ -135,6 +135,55 @@
 
 
   /**
+   * Tests that negative integers are encoded according
+   * to ASN.1 BER specification.
+   *
+   * @throws  Exception  If an unexpected problem occurs.
+   */
+  @Test()
+  public void testNegativeLongEncoding()
+         throws Exception
+  {
+    byte[] value = null;
+    // Some negative integers of interest
+    // to test specific ranges/boundaries.
+    value = ASN1Long.encodeLongValue(-1L);
+    assertEquals(value[0], (byte) 0xFF);
+    value = ASN1Long.encodeLongValue(-2L);
+    assertEquals(value[0], (byte) 0xFE);
+    value = ASN1Long.encodeLongValue(-127L);
+    assertEquals(value[0], (byte) 0x81);
+    value = ASN1Long.encodeLongValue(-128L);
+    assertEquals(value[0], (byte) 0x80);
+    value = ASN1Long.encodeLongValue(-255L);
+    assertEquals(value[0], (byte) 0xFF);
+    assertEquals(value[1], (byte) 0x01);
+    value = ASN1Long.encodeLongValue(-256L);
+    assertEquals(value[0], (byte) 0xFF);
+    assertEquals(value[1], (byte) 0x00);
+    value = ASN1Long.encodeLongValue(-65535L);
+    assertEquals(value[0], (byte) 0xFF);
+    assertEquals(value[1], (byte) 0x00);
+    assertEquals(value[2], (byte) 0x01);
+    value = ASN1Long.encodeLongValue(-65536L);
+    assertEquals(value[0], (byte) 0xFF);
+    assertEquals(value[1], (byte) 0x00);
+    assertEquals(value[2], (byte) 0x00);
+    value = ASN1Long.encodeLongValue(-2147483647L);
+    assertEquals(value[0], (byte) 0x80);
+    assertEquals(value[1], (byte) 0x00);
+    assertEquals(value[2], (byte) 0x00);
+    assertEquals(value[3], (byte) 0x01);
+    value = ASN1Long.encodeLongValue(-2147483648L);
+    assertEquals(value[0], (byte) 0x80);
+    assertEquals(value[1], (byte) 0x00);
+    assertEquals(value[2], (byte) 0x00);
+    assertEquals(value[3], (byte) 0x00);
+  }
+
+
+
+  /**
    * Tests the <CODE>setValue</CODE> method that takes a long argument.
    *
    * @param  l  The long value to use for the test.

--
Gitblit v1.10.0