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/PasswordPolicyResponseControl.java | 64 ++++++++++++++------------------
1 files changed, 28 insertions(+), 36 deletions(-)
diff --git a/opendj-sdk/opends/src/server/org/opends/server/controls/PasswordPolicyResponseControl.java b/opendj-sdk/opends/src/server/org/opends/server/controls/PasswordPolicyResponseControl.java
index ae6cc4e..b45f309 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/controls/PasswordPolicyResponseControl.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/controls/PasswordPolicyResponseControl.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;
@@ -81,43 +81,35 @@
reader.readStartSequence();
- while(reader.hasNextElement())
+ if(reader.hasNextElement() &&
+ reader.peekType() == TYPE_WARNING_ELEMENT)
{
- switch (reader.peekType())
+ // Its a CHOICE element. Read as sequence to retrieve
+ // nested element.
+ reader.readStartSequence();
+ warningType =
+ PasswordPolicyWarningType.valueOf(reader.peekType());
+ warningValue = (int)reader.readInteger();
+ if (warningType == null)
{
- case TYPE_WARNING_ELEMENT:
- // Its a CHOICE element. Read as sequence to retrieve
- // nested element.
- reader.readStartSequence();
- warningType =
- PasswordPolicyWarningType.valueOf(reader.peekType());
- warningValue = (int)reader.readInteger();
- if (warningType == null)
- {
- Message message = ERR_PWPOLICYRES_INVALID_WARNING_TYPE.get(
- byteToHex(reader.peekType()));
- throw new DirectoryException(ResultCode.PROTOCOL_ERROR,
- message);
- }
- reader.readEndSequence();
- break;
-
- case TYPE_ERROR_ELEMENT:
- int errorValue = (int)reader.readInteger();
- errorType = PasswordPolicyErrorType.valueOf(errorValue);
- if (errorType == null)
- {
- Message message =
- ERR_PWPOLICYRES_INVALID_ERROR_TYPE.get(errorValue);
- throw new DirectoryException(ResultCode.PROTOCOL_ERROR,
- message);
- }
- break;
-
- default:
- Message message = ERR_PWPOLICYRES_INVALID_ELEMENT_TYPE.get(
- byteToHex(reader.peekType()));
- throw new DirectoryException(ResultCode.PROTOCOL_ERROR, message);
+ Message message = ERR_PWPOLICYRES_INVALID_WARNING_TYPE.get(
+ byteToHex(reader.peekType()));
+ throw new DirectoryException(ResultCode.PROTOCOL_ERROR,
+ message);
+ }
+ reader.readEndSequence();
+ }
+ if(reader.hasNextElement() &&
+ reader.peekType() == TYPE_ERROR_ELEMENT)
+ {
+ int errorValue = (int)reader.readInteger();
+ errorType = PasswordPolicyErrorType.valueOf(errorValue);
+ if (errorType == null)
+ {
+ Message message =
+ ERR_PWPOLICYRES_INVALID_ERROR_TYPE.get(errorValue);
+ throw new DirectoryException(ResultCode.PROTOCOL_ERROR,
+ message);
}
}
--
Gitblit v1.10.0