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/controls/EntryChangeNotificationControl.java | 41 +++++++++++++++++++----------------------
1 files changed, 19 insertions(+), 22 deletions(-)
diff --git a/opendj-sdk/opends/src/server/org/opends/server/controls/EntryChangeNotificationControl.java b/opendj-sdk/opends/src/server/org/opends/server/controls/EntryChangeNotificationControl.java
index ef01791..f9f4607 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/controls/EntryChangeNotificationControl.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/controls/EntryChangeNotificationControl.java
@@ -22,7 +22,7 @@
* CDDL HEADER END
*
*
- * Copyright 2006-2008 Sun Microsystems, Inc.
+ * Copyright 2006-2009 Sun Microsystems, Inc.
*/
package org.opends.server.controls;
import org.opends.messages.Message;
@@ -33,6 +33,8 @@
import org.opends.server.protocols.asn1.*;
import static org.opends.server.protocols.asn1.ASN1Constants.
UNIVERSAL_OCTET_STRING_TYPE;
+import static org.opends.server.protocols.asn1.ASN1Constants.
+ UNIVERSAL_INTEGER_TYPE;
import org.opends.server.types.*;
import static org.opends.server.loggers.debug.DebugLogger.*;
@@ -81,28 +83,23 @@
int changeTypeValue = (int)reader.readInteger();
changeType = PersistentSearchChangeType.valueOf(changeTypeValue);
- while(reader.hasNextElement()) {
- switch(reader.peekType()) {
- case ASN1Constants.UNIVERSAL_OCTET_STRING_TYPE :
- if (changeType != PersistentSearchChangeType.MODIFY_DN)
- {
- Message message =
- ERR_ECN_ILLEGAL_PREVIOUS_DN.get(String.valueOf(changeType));
- throw new DirectoryException(
- ResultCode.PROTOCOL_ERROR, message);
- }
-
- previousDN = DN.decode(reader.readOctetStringAsString());
- break;
- case ASN1Constants.UNIVERSAL_INTEGER_TYPE :
- changeNumber = reader.readInteger();
- break;
- default :
- Message message =
- ERR_ECN_INVALID_ELEMENT_TYPE.get(
- byteToHex(reader.peekType()));
- throw new DirectoryException(ResultCode.PROTOCOL_ERROR, message);
+ if(reader.hasNextElement() &&
+ reader.peekType() == UNIVERSAL_OCTET_STRING_TYPE)
+ {
+ if (changeType != PersistentSearchChangeType.MODIFY_DN)
+ {
+ Message message =
+ ERR_ECN_ILLEGAL_PREVIOUS_DN.get(String.valueOf(changeType));
+ throw new DirectoryException(
+ ResultCode.PROTOCOL_ERROR, message);
}
+
+ previousDN = DN.decode(reader.readOctetStringAsString());
+ }
+ if(reader.hasNextElement() &&
+ reader.peekType() == UNIVERSAL_INTEGER_TYPE)
+ {
+ changeNumber = reader.readInteger();
}
}
catch (DirectoryException de)
--
Gitblit v1.10.0