| | |
| | | * Portions Copyright 2006-2007 Sun Microsystems, Inc. |
| | | */ |
| | | package org.opends.server.protocols.asn1; |
| | | import org.opends.messages.Message; |
| | | |
| | | |
| | | |
| | |
| | | import org.opends.server.api.ProtocolElement; |
| | | import org.opends.server.types.ByteString; |
| | | |
| | | import static org.opends.server.messages.MessageHandler.*; |
| | | import static org.opends.server.messages.ProtocolMessages.*; |
| | | import static org.opends.messages.ProtocolMessages.*; |
| | | import static org.opends.server.protocols.asn1.ASN1Constants.*; |
| | | import static org.opends.server.util.ServerConstants.*; |
| | | import static org.opends.server.util.StaticUtils.*; |
| | |
| | | // a valid ASN.1 element. |
| | | if (encodedElement == null) |
| | | { |
| | | int msgID = MSGID_ASN1_NULL_ELEMENT; |
| | | String message = getMessage(msgID); |
| | | throw new ASN1Exception(msgID, message); |
| | | Message message = ERR_ASN1_NULL_ELEMENT.get(); |
| | | throw new ASN1Exception(message); |
| | | } |
| | | else if (encodedElement.length < 2) |
| | | { |
| | | int msgID = MSGID_ASN1_SHORT_ELEMENT; |
| | | String message = getMessage(msgID, encodedElement.length); |
| | | throw new ASN1Exception(msgID, message); |
| | | Message message = ERR_ASN1_SHORT_ELEMENT.get(encodedElement.length); |
| | | throw new ASN1Exception(message); |
| | | } |
| | | |
| | | |
| | |
| | | int numLengthBytes = length; |
| | | if (numLengthBytes > 4) |
| | | { |
| | | int msgID = MSGID_ASN1_INVALID_NUM_LENGTH_BYTES; |
| | | String message = getMessage(msgID, numLengthBytes); |
| | | throw new ASN1Exception(msgID, message); |
| | | Message message = ERR_ASN1_INVALID_NUM_LENGTH_BYTES.get(numLengthBytes); |
| | | throw new ASN1Exception(message); |
| | | } |
| | | else if (encodedElement.length < (2 + numLengthBytes)) |
| | | { |
| | | int msgID = MSGID_ASN1_TRUNCATED_LENGTH; |
| | | String message = getMessage(msgID, numLengthBytes); |
| | | throw new ASN1Exception(msgID, message); |
| | | Message message = ERR_ASN1_TRUNCATED_LENGTH.get(numLengthBytes); |
| | | throw new ASN1Exception(message); |
| | | } |
| | | |
| | | length = 0x00; |
| | |
| | | // in the value. |
| | | if ((encodedElement.length - valueStartPos) != length) |
| | | { |
| | | int msgID = MSGID_ASN1_LENGTH_MISMATCH; |
| | | String message = getMessage(msgID, length, |
| | | (encodedElement.length - valueStartPos)); |
| | | throw new ASN1Exception(msgID, message); |
| | | Message message = ERR_ASN1_LENGTH_MISMATCH.get( |
| | | length, (encodedElement.length - valueStartPos)); |
| | | throw new ASN1Exception(message); |
| | | } |
| | | |
| | | |
| | |
| | | // a valid ASN.1 element. |
| | | if (encodedElement == null) |
| | | { |
| | | int msgID = MSGID_ASN1_NULL_ELEMENT; |
| | | String message = getMessage(msgID); |
| | | throw new ASN1Exception(msgID, message); |
| | | Message message = ERR_ASN1_NULL_ELEMENT.get(); |
| | | throw new ASN1Exception(message); |
| | | } |
| | | else if ((startPos < 0) || (startPos+length > encodedElement.length) || |
| | | (length < 2)) |
| | | { |
| | | int msgID = MSGID_ASN1_SHORT_ELEMENT; |
| | | String message = getMessage(msgID, encodedElement.length); |
| | | throw new ASN1Exception(msgID, message); |
| | | Message message = ERR_ASN1_SHORT_ELEMENT.get(encodedElement.length); |
| | | throw new ASN1Exception(message); |
| | | } |
| | | |
| | | |
| | |
| | | int numLengthBytes = elementLength; |
| | | if (numLengthBytes > 4) |
| | | { |
| | | int msgID = MSGID_ASN1_INVALID_NUM_LENGTH_BYTES; |
| | | String message = getMessage(msgID, numLengthBytes); |
| | | throw new ASN1Exception(msgID, message); |
| | | Message message = ERR_ASN1_INVALID_NUM_LENGTH_BYTES.get(numLengthBytes); |
| | | throw new ASN1Exception(message); |
| | | } |
| | | else if (startPos+length < (2 + numLengthBytes)) |
| | | { |
| | | int msgID = MSGID_ASN1_TRUNCATED_LENGTH; |
| | | String message = getMessage(msgID, numLengthBytes); |
| | | throw new ASN1Exception(msgID, message); |
| | | Message message = ERR_ASN1_TRUNCATED_LENGTH.get(numLengthBytes); |
| | | throw new ASN1Exception(message); |
| | | } |
| | | |
| | | elementLength = 0x00; |
| | |
| | | // in the value. |
| | | if ((startPos+length - valueStartPos) != elementLength) |
| | | { |
| | | int msgID = MSGID_ASN1_LENGTH_MISMATCH; |
| | | String message = getMessage(msgID, elementLength, |
| | | (startPos+length - valueStartPos)); |
| | | throw new ASN1Exception(msgID, message); |
| | | Message message = ERR_ASN1_LENGTH_MISMATCH.get( |
| | | elementLength, (startPos+length - valueStartPos)); |
| | | throw new ASN1Exception(message); |
| | | } |
| | | |
| | | |
| | |
| | | // Make sure that the element array is not null. |
| | | if (encodedElements == null) |
| | | { |
| | | int msgID = MSGID_ASN1_ELEMENT_SET_NULL; |
| | | String message = getMessage(msgID); |
| | | throw new ASN1Exception(msgID, message); |
| | | Message message = ERR_ASN1_ELEMENT_SET_NULL.get(); |
| | | throw new ASN1Exception(message); |
| | | } |
| | | |
| | | |
| | |
| | | byte type = encodedElements[startPos++]; |
| | | if (startPos >= encodedElements.length) |
| | | { |
| | | int msgID = MSGID_ASN1_ELEMENT_SET_NO_LENGTH; |
| | | String message = getMessage(msgID); |
| | | throw new ASN1Exception(msgID, message); |
| | | Message message = ERR_ASN1_ELEMENT_SET_NO_LENGTH.get(); |
| | | throw new ASN1Exception(message); |
| | | } |
| | | |
| | | |
| | |
| | | int numLengthBytes = length; |
| | | if (numLengthBytes > 4) |
| | | { |
| | | int msgID = MSGID_ASN1_ELEMENT_SET_INVALID_NUM_LENGTH_BYTES; |
| | | String message = getMessage(msgID, numLengthBytes); |
| | | throw new ASN1Exception(msgID, message); |
| | | Message message = |
| | | ERR_ASN1_ELEMENT_SET_INVALID_NUM_LENGTH_BYTES.get(numLengthBytes); |
| | | throw new ASN1Exception(message); |
| | | } |
| | | |
| | | if (numLengthBytes > encodedElements.length - startPos) |
| | | { |
| | | int msgID = MSGID_ASN1_ELEMENT_SET_TRUNCATED_LENGTH; |
| | | String message = getMessage(msgID, numLengthBytes); |
| | | throw new ASN1Exception(msgID, message); |
| | | Message message = |
| | | ERR_ASN1_ELEMENT_SET_TRUNCATED_LENGTH.get(numLengthBytes); |
| | | throw new ASN1Exception(message); |
| | | } |
| | | |
| | | length = 0x00; |
| | |
| | | // Make sure that there are at least enough bytes to hold the value. |
| | | if (length > encodedElements.length - startPos) |
| | | { |
| | | int msgID = MSGID_ASN1_ELEMENT_SET_TRUNCATED_VALUE; |
| | | String message = getMessage(msgID, length, |
| | | (encodedElements.length-startPos)); |
| | | throw new ASN1Exception(msgID, message); |
| | | Message message = ERR_ASN1_ELEMENT_SET_TRUNCATED_VALUE.get( |
| | | length, (encodedElements.length-startPos)); |
| | | throw new ASN1Exception(message); |
| | | } |
| | | |
| | | |