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/TestASN1Integer.java |   49 +++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 49 insertions(+), 0 deletions(-)

diff --git a/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/asn1/TestASN1Integer.java b/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/asn1/TestASN1Integer.java
index ed2b2ee..d3b1247 100644
--- a/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/asn1/TestASN1Integer.java
+++ b/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/asn1/TestASN1Integer.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 testNegativeIntEncoding()
+         throws Exception
+  {
+    byte[] value = null;
+    // Some negative integers of interest
+    // to test specific ranges/boundaries.
+    value = ASN1Integer.encodeValue(-1);
+    assertEquals(value[0], (byte) 0xFF);
+    value = ASN1Integer.encodeValue(-2);
+    assertEquals(value[0], (byte) 0xFE);
+    value = ASN1Integer.encodeValue(-127);
+    assertEquals(value[0], (byte) 0x81);
+    value = ASN1Integer.encodeValue(-128);
+    assertEquals(value[0], (byte) 0x80);
+    value = ASN1Integer.encodeValue(-255);
+    assertEquals(value[0], (byte) 0xFF);
+    assertEquals(value[1], (byte) 0x01);
+    value = ASN1Integer.encodeValue(-256);
+    assertEquals(value[0], (byte) 0xFF);
+    assertEquals(value[1], (byte) 0x00);
+    value = ASN1Integer.encodeValue(-65535);
+    assertEquals(value[0], (byte) 0xFF);
+    assertEquals(value[1], (byte) 0x00);
+    assertEquals(value[2], (byte) 0x01);
+    value = ASN1Integer.encodeValue(-65536);
+    assertEquals(value[0], (byte) 0xFF);
+    assertEquals(value[1], (byte) 0x00);
+    assertEquals(value[2], (byte) 0x00);
+    value = ASN1Integer.encodeValue(-2147483647);
+    assertEquals(value[0], (byte) 0x80);
+    assertEquals(value[1], (byte) 0x00);
+    assertEquals(value[2], (byte) 0x00);
+    assertEquals(value[3], (byte) 0x01);
+    value = ASN1Integer.encodeValue(-2147483648);
+    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 an int argument.
    *
    * @param  i  The integer value to use for the test.

--
Gitblit v1.10.0