You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by el...@apache.org on 2006/01/13 10:58:56 UTC
svn commit: r368661 - in
/directory/trunks/asn1/src/main/java/org/apache/asn1/ber:
AbstractContainer.java Asn1Decoder.java IAsn1Container.java
Author: elecharny
Date: Fri Jan 13 01:58:52 2006
New Revision: 368661
URL: http://svn.apache.org/viewcvs?rev=368661&view=rev
Log:
Fixed the bug DIRSNICKERS-121. I've added a flag that should be set to true if the current transition could be the last one
Modified:
directory/trunks/asn1/src/main/java/org/apache/asn1/ber/AbstractContainer.java
directory/trunks/asn1/src/main/java/org/apache/asn1/ber/Asn1Decoder.java
directory/trunks/asn1/src/main/java/org/apache/asn1/ber/IAsn1Container.java
Modified: directory/trunks/asn1/src/main/java/org/apache/asn1/ber/AbstractContainer.java
URL: http://svn.apache.org/viewcvs/directory/trunks/asn1/src/main/java/org/apache/asn1/ber/AbstractContainer.java?rev=368661&r1=368660&r2=368661&view=diff
==============================================================================
--- directory/trunks/asn1/src/main/java/org/apache/asn1/ber/AbstractContainer.java (original)
+++ directory/trunks/asn1/src/main/java/org/apache/asn1/ber/AbstractContainer.java Fri Jan 13 01:58:52 2006
@@ -64,6 +64,9 @@
/** The parent TLV */
protected TLV parentTLV;
+
+ /** The grammar end transition flag */
+ protected boolean grammarEndAllowed;
//~ Methods ------------------------------------------------------------------------------------
@@ -139,6 +142,25 @@
public void setState( int state )
{
this.state = state;
+ }
+
+ /**
+ * Check that we can have a end state after this transition
+ * @return true if this can be the last transition
+ */
+ public boolean isGrammarEndAllowed()
+ {
+ return grammarEndAllowed;
+ }
+
+ /**
+ * Set the flag to allow a end transition
+ * @param endAllowed true or false, depending on the next
+ * transition being an end or not.
+ */
+ public void grammarEndAllowed( boolean grammarEndAllowed )
+ {
+ this.grammarEndAllowed = grammarEndAllowed;
}
/**
Modified: directory/trunks/asn1/src/main/java/org/apache/asn1/ber/Asn1Decoder.java
URL: http://svn.apache.org/viewcvs/directory/trunks/asn1/src/main/java/org/apache/asn1/ber/Asn1Decoder.java?rev=368661&r1=368660&r2=368661&view=diff
==============================================================================
--- directory/trunks/asn1/src/main/java/org/apache/asn1/ber/Asn1Decoder.java (original)
+++ directory/trunks/asn1/src/main/java/org/apache/asn1/ber/Asn1Decoder.java Fri Jan 13 01:58:52 2006
@@ -18,6 +18,7 @@
import org.apache.asn1.codec.DecoderException;
+import org.apache.asn1.ber.grammar.IStates;
import org.apache.asn1.ber.tlv.TLV;
import org.apache.asn1.ber.tlv.TLVStateEnum;
import org.apache.asn1.ber.tlv.Tag;
@@ -727,10 +728,26 @@
container.getGrammar().executeAction( container );
// Check if the PDU has been fully decoded.
- if ( isTLVDecoded(container) )
+ if ( isTLVDecoded( container ) )
{
- // Change the state to DECODED
- container.setState( TLVStateEnum.PDU_DECODED );
+ if ( container.getState() == IStates.GRAMMAR_END )
+ {
+ // Change the state to DECODED
+ container.setState( TLVStateEnum.PDU_DECODED );
+ }
+ else
+ {
+ if ( container.isGrammarEndAllowed() )
+ {
+ // Change the state to DECODED
+ container.setState( TLVStateEnum.PDU_DECODED );
+ }
+ else
+ {
+ log.error( "The PDU is decoded, but we should have had more TLVs" );
+ throw new DecoderException( "Truncated PDU. Some elements are lacking, accordingly to the grammar" );
+ }
+ }
}
else
@@ -803,7 +820,7 @@
*
* @throws DecoderException Thrown if anything went wrong!
*/
- public void decode( ByteBuffer stream, IAsn1Container container ) throws org.apache.asn1.codec.DecoderException
+ public void decode( ByteBuffer stream, IAsn1Container container ) throws DecoderException
{
/* We have to deal with the current state. This is an
@@ -844,6 +861,8 @@
{
case TLVStateEnum.TAG_STATE_START :
+ // Reset the GrammarEnd flag first
+ container.grammarEndAllowed( false );
hasRemaining = treatTagStartState( stream, container );
break;
Modified: directory/trunks/asn1/src/main/java/org/apache/asn1/ber/IAsn1Container.java
URL: http://svn.apache.org/viewcvs/directory/trunks/asn1/src/main/java/org/apache/asn1/ber/IAsn1Container.java?rev=368661&r1=368660&r2=368661&view=diff
==============================================================================
--- directory/trunks/asn1/src/main/java/org/apache/asn1/ber/IAsn1Container.java (original)
+++ directory/trunks/asn1/src/main/java/org/apache/asn1/ber/IAsn1Container.java Fri Jan 13 01:58:52 2006
@@ -133,4 +133,17 @@
* @param The new parent TLV
*/
public void setParentTLV( TLV parentTLV);
+
+ /**
+ * Check that we can have a end state after this transition
+ * @return true if this can be the last transition
+ */
+ public boolean isGrammarEndAllowed();
+
+ /**
+ * Set the flag to allow a end transition
+ * @param endAllowed true or false, depending on the next
+ * transition being an end or not.
+ */
+ public void grammarEndAllowed( boolean grammarEndAllowed );
}