From 13fed9d155554880852ee313b65f5b5a4fa0db3d Mon Sep 17 00:00:00 2001
From: vharseko <vharseko@3a-systems.ru>
Date: Tue, 29 Aug 2023 15:09:45 +0000
Subject: [PATCH] FIX unused trailing bytes in ASN.1 SEQUENCE (#296)

---
 opendj-grizzly/src/main/java/org/forgerock/opendj/grizzly/ASN1BufferReader.java |   21 ++++++++++++++++-----
 1 files changed, 16 insertions(+), 5 deletions(-)

diff --git a/opendj-grizzly/src/main/java/org/forgerock/opendj/grizzly/ASN1BufferReader.java b/opendj-grizzly/src/main/java/org/forgerock/opendj/grizzly/ASN1BufferReader.java
index 86c5b54..4610407 100644
--- a/opendj-grizzly/src/main/java/org/forgerock/opendj/grizzly/ASN1BufferReader.java
+++ b/opendj-grizzly/src/main/java/org/forgerock/opendj/grizzly/ASN1BufferReader.java
@@ -35,7 +35,13 @@
 /** Grizzly ASN1 reader implementation. */
 final class ASN1BufferReader extends AbstractASN1Reader {
     private final class ChildSequenceLimiter implements SequenceLimiter {
-        private SequenceLimiter parent;
+        @Override
+		public String toString() {
+			return "ChildSequenceLimiter [parent=" + parent + ", child=" + child + ", readLimit=" + readLimit
+					+ ", bytesRead=" + bytesRead + ", remaining()=" + remaining() + "]";
+		}
+
+		private SequenceLimiter parent;
         private ChildSequenceLimiter child;
         private int readLimit;
         private int bytesRead;
@@ -55,7 +61,7 @@
             parent.checkLimit(remaining());
             if (remaining() > 0) {
                 logger.debug(LocalizableMessage.raw(
-                    "Ignoring %d unused trailing bytes in ASN.1 SEQUENCE", remaining()));
+                    "Ignoring %d unused trailing bytes in ASN.1 SEQUENCE: %s", remaining(),toString()));
             }
             for (int i = 0; i < remaining(); i++) {
                 buffer.get();
@@ -81,11 +87,16 @@
     }
 
     private final class RootSequenceLimiter implements SequenceLimiter {
-        private ChildSequenceLimiter child;
+        @Override
+		public String toString() {
+			return "RootSequenceLimiter [remaining()=" + remaining() + "]";
+		}
+
+		private ChildSequenceLimiter child;
 
         @Override
         public void checkLimit(final int readSize) throws IOException {
-            if (buffer.remaining() < readSize) {
+            if ( remaining() < readSize) {
                 final LocalizableMessage message = ERR_ASN1_TRUNCATED_LENGTH_BYTE.get();
                 throw DecodeException.fatalError(message);
             }
@@ -99,7 +110,7 @@
 
         @Override
         public int remaining() {
-            return buffer.remaining();
+            return buffer.hasRemaining() ? buffer.remaining() : 0;
         }
 
         @Override

--
Gitblit v1.10.0