From 14c8bca1f415a6a6a6cd27cec775c2d1e52427aa Mon Sep 17 00:00:00 2001
From: boli <boli@localhost>
Date: Fri, 01 May 2009 01:14:55 +0000
Subject: [PATCH] Second fix for issue 3949: All ASN.1 parsing code now ignores trailing unrecognized SEQUENCE components.

---
 opendj-sdk/opends/src/server/org/opends/server/protocols/asn1/ASN1InputStreamReader.java |   22 +++++++++++++++++-----
 1 files changed, 17 insertions(+), 5 deletions(-)

diff --git a/opendj-sdk/opends/src/server/org/opends/server/protocols/asn1/ASN1InputStreamReader.java b/opendj-sdk/opends/src/server/org/opends/server/protocols/asn1/ASN1InputStreamReader.java
index 56e838c..f3a7e86 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/protocols/asn1/ASN1InputStreamReader.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/protocols/asn1/ASN1InputStreamReader.java
@@ -765,14 +765,26 @@
       throw new ASN1Exception(message);
     }
 
-    // If not everything was read, throw error
+    // Ignore all unused trailing components.
     SizeLimitInputStream subSq = (SizeLimitInputStream)in;
     if(subSq.getSizeLimit() - subSq.getBytesRead() > 0)
     {
-      Message message =
-          ERR_ASN1_SEQUENCE_READ_NOT_ENDED.get(subSq.getSizeLimit() -
-              subSq.getBytesRead(), subSq.getSizeLimit());
-      throw new ASN1Exception(message);
+      if(debugEnabled())
+      {
+        TRACER.debugWarning("Ignoring %d unused trailing bytes in " +
+            "ASN.1 SEQUENCE", subSq.getSizeLimit() - subSq.getBytesRead());
+      }
+
+      try
+      {
+        subSq.skip(subSq.getSizeLimit() - subSq.getBytesRead());
+      }
+      catch(IOException ioe)
+      {
+        Message message =
+            ERR_ASN1_READ_ERROR.get(ioe.toString());
+        throw new ASN1Exception(message, ioe);
+      }
     }
 
     in = streamStack.removeFirst();

--
Gitblit v1.10.0