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