From 5ef5b7ebec21ac99a61466cf5861b7d301bc7da0 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.
---
opends/src/server/org/opends/server/controls/ServerSideSortRequestControl.java | 46 +++++++++++++++++++---------------------------
1 files changed, 19 insertions(+), 27 deletions(-)
diff --git a/opends/src/server/org/opends/server/controls/ServerSideSortRequestControl.java b/opends/src/server/org/opends/server/controls/ServerSideSortRequestControl.java
index a9c1361..b44f866 100644
--- a/opends/src/server/org/opends/server/controls/ServerSideSortRequestControl.java
+++ b/opends/src/server/org/opends/server/controls/ServerSideSortRequestControl.java
@@ -124,37 +124,28 @@
OrderingMatchingRule orderingRule = null;
boolean ascending = true;
-
- while(reader.hasNextElement())
+ if(reader.hasNextElement() &&
+ reader.peekType() == TYPE_ORDERING_RULE_ID)
{
- switch (reader.peekType())
+ String orderingRuleID =
+ toLowerCase(reader.readOctetStringAsString());
+ orderingRule =
+ DirectoryServer.getOrderingMatchingRule(orderingRuleID);
+ if (orderingRule == null)
{
- case TYPE_ORDERING_RULE_ID:
- String orderingRuleID =
- toLowerCase(reader.readOctetStringAsString());
- orderingRule =
- DirectoryServer.getOrderingMatchingRule(orderingRuleID);
- if (orderingRule == null)
- {
- Message message =
- INFO_SORTREQ_CONTROL_UNDEFINED_ORDERING_RULE.
- get(orderingRuleID);
- throw new DirectoryException(ResultCode.PROTOCOL_ERROR,
- message);
- }
- break;
-
- case TYPE_REVERSE_ORDER:
- ascending = ! reader.readBoolean();
- break;
-
- default:
- Message message = INFO_SORTREQ_CONTROL_INVALID_SEQ_ELEMENT_TYPE.
- get(byteToHex(reader.peekType()));
- throw new DirectoryException(ResultCode.PROTOCOL_ERROR,
- message);
+ Message message =
+ INFO_SORTREQ_CONTROL_UNDEFINED_ORDERING_RULE.
+ get(orderingRuleID);
+ throw new DirectoryException(ResultCode.PROTOCOL_ERROR,
+ message);
}
}
+ if(reader.hasNextElement() &&
+ reader.peekType() == TYPE_REVERSE_ORDER)
+ {
+ ascending = ! reader.readBoolean();
+ }
+ reader.readEndSequence();
if ((orderingRule == null) &&
(attrType.getOrderingMatchingRule() == null))
@@ -167,6 +158,7 @@
sortKeys.add(new SortKey(attrType, ascending, orderingRule));
}
+ reader.readEndSequence();
return new ServerSideSortRequestControl(isCritical,
new SortOrder(sortKeys.toArray(new SortKey[0])));
--
Gitblit v1.10.0