You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@directory.apache.org by Alex Karasulu <ao...@bellsouth.net> on 2005/03/02 01:06:31 UTC

[Fwd: svn commit: r155835 - in incubator/directory/asn1/trunk/ber/src: java/org/apache/asn1/ber/Length.java test/org/apache/asn1/ber/LengthTest.java]

Alan,

Could you apply this to the 'rewrite' branch as well?  In general if we 
make a change to the trunk it would be nice to apply fixes to branches 
as well.  Don't know if your branch 'ber-decoder' would take it though.

Thanks,
Alex

Re: [Fwd: svn commit: r155835 - in incubator/directory/asn1/trunk/ber/src: java/org/apache/asn1/ber/Length.java test/org/apache/asn1/ber/LengthTest.java]

Posted by "Alan D. Cabrera" <ad...@toolazydogs.com>.
Nope, I'm not doing anything in that branch, I think.


Regards,
Alan

Alex Karasulu wrote:

> Alan D. Cabrera wrote:
>
>> I think that it should be up to the branch owners to update what is 
>> relevant for the work that they are performing.
>>
> Ok I thought we're all working this branch together.  However I will 
> merge this change.
>
> Thanks,
> Alex
>
>> Alex Karasulu wrote:
>>
>>> Alan,
>>>
>>> Could you apply this to the 'rewrite' branch as well?  In general if 
>>> we make a change to the trunk it would be nice to apply fixes to 
>>> branches as well.  Don't know if your branch 'ber-decoder' would 
>>> take it though.
>>>
>>> Thanks,
>>> Alex
>>>
>>> ------------------------------------------------------------------------ 
>>>
>>>
>>> Subject:
>>> svn commit: r155835 - in incubator/directory/asn1/trunk/ber/src: 
>>> java/org/apache/asn1/ber/Length.java 
>>> test/org/apache/asn1/ber/LengthTest.java
>>> From:
>>> adc@apache.org
>>> Date:
>>> Tue, 01 Mar 2005 22:46:34 -0000
>>> To:
>>> directory-cvs@incubator.apache.org
>>>
>>> To:
>>> directory-cvs@incubator.apache.org
>>>
>>> X-Account-Key:
>>> account2
>>> Return-Path:
>>> <di...@incubator.apache.org> 
>>>
>>> Received:
>>> from minotaur.apache.org ([209.237.227.194]) by 
>>> imf04aec.mail.bellsouth.net (InterMail vM.5.01.06.11 
>>> 201-253-122-130-111-20040605) with SMTP id 
>>> <20...@minotaur.apache.org> 
>>> for <ao...@bellsouth.net>; Tue, 1 Mar 2005 17:46:39 -0500
>>> Received:
>>> (qmail 66870 invoked by uid 1761); 1 Mar 2005 22:46:38 -0000
>>> Delivered-To:
>>> akarasulu@locus.apache.org
>>> Received:
>>> (qmail 66839 invoked from network); 1 Mar 2005 22:46:38 -0000
>>> Received:
>>> from hermes.apache.org (HELO mail.apache.org) (209.237.227.199) by 
>>> minotaur.apache.org with SMTP; 1 Mar 2005 22:46:38 -0000
>>> Received:
>>> (qmail 11140 invoked by uid 500); 1 Mar 2005 22:46:37 -0000
>>> Delivered-To:
>>> apmail-akarasulu@apache.org
>>> Received:
>>> (qmail 11085 invoked by uid 500); 1 Mar 2005 22:46:36 -0000
>>> Mailing-List:
>>> contact directory-cvs-help@incubator.apache.org; run by ezmlm
>>> Precedence:
>>> bulk
>>> List-Help:
>>> <ma...@incubator.apache.org>
>>> List-Unsubscribe:
>>> <ma...@incubator.apache.org>
>>> List-Post:
>>> <ma...@incubator.apache.org>
>>> List-Id:
>>> <directory-cvs.incubator.apache.org>
>>> Reply-To:
>>> directory-dev@incubator.apache.org
>>> Delivered-To:
>>> mailing list directory-cvs@incubator.apache.org
>>> Received:
>>> (qmail 11071 invoked by uid 99); 1 Mar 2005 22:46:36 -0000
>>> X-ASF-Spam-Status:
>>> No, hits=-9.8 required=10.0 tests=ALL_TRUSTED,NO_REAL_NAME
>>> X-Spam-Check-By:
>>> apache.org
>>> Received:
>>> from minotaur.apache.org (HELO minotaur.apache.org) 
>>> (209.237.227.194) by apache.org (qpsmtpd/0.28) with SMTP; Tue, 01 
>>> Mar 2005 14:46:36 -0800
>>> Received:
>>> (qmail 66781 invoked by uid 65534); 1 Mar 2005 22:46:34 -0000
>>> Message-ID:
>>> <20...@minotaur.apache.org>
>>> Content-Type:
>>> text/plain; charset="utf-8"
>>> MIME-Version:
>>> 1.0
>>> Content-Transfer-Encoding:
>>> quoted-printable
>>> X-Mailer:
>>> svnmailer-1.0.0-dev
>>> X-Virus-Checked:
>>> Checked
>>> X-Spam-Rating:
>>> minotaur.apache.org 1.6.2 0/1000/N
>>>
>>>
>>> Author: adc
>>> Date: Tue Mar  1 14:46:31 2005
>>> New Revision: 155835
>>>
>>> URL: http://svn.apache.org/viewcvs?view=rev&rev=155835
>>> Log:
>>> The Length' s number of bytes must not be 127
>>> http://issues.apache.org/jira/browse/DIRSNICKERS-102
>>>
>>> Modified:
>>>    
>>> incubator/directory/asn1/trunk/ber/src/java/org/apache/asn1/ber/Length.java 
>>>
>>>    
>>> incubator/directory/asn1/trunk/ber/src/test/org/apache/asn1/ber/LengthTest.java 
>>>
>>>
>>> Modified: 
>>> incubator/directory/asn1/trunk/ber/src/java/org/apache/asn1/ber/Length.java 
>>>
>>> URL: 
>>> http://svn.apache.org/viewcvs/incubator/directory/asn1/trunk/ber/src/java/org/apache/asn1/ber/Length.java?view=diff&r1=155834&r2=155835 
>>>
>>> ============================================================================== 
>>>
>>> --- 
>>> incubator/directory/asn1/trunk/ber/src/java/org/apache/asn1/ber/Length.java 
>>> (original)
>>> +++ 
>>> incubator/directory/asn1/trunk/ber/src/java/org/apache/asn1/ber/Length.java 
>>> Tue Mar  1 14:46:31 2005
>>> @@ -32,8 +32,8 @@
>>> public class Length
>>> {
>>>     /** used to mark length as indefinate */
>>> -    public static final int INDEFINATE = -2 ;
>>> -    /** used to mark length as undefined */ +    public static 
>>> final int INDEFINITE = -2 ;
>>> +    /** used to mark length as undefined */
>>>     public static final int UNDEFINED = -1 ;
>>>     /** the end long form terminate bit flag mask */
>>>     public static final int END_MASK = 0x80 ;
>>> @@ -44,21 +44,21 @@
>>>     private int numOctets = UNDEFINED ;
>>>     /** whether or not this length has been fixated */
>>>     private boolean isFixated = false ;
>>> -    /** a byte buffer used to collect the arriving length octets */ 
>>> +    /** a byte buffer used to collect the arriving length octets */
>>>     private final ByteBuffer buf = ByteBuffer.allocate( 5 ) ;
>>>
>>>
>>>     /**
>>>      * Checks to see if the length has been fixated.
>>> -     * +     *
>>>      * @return true if it is fixated, false if not
>>>      */
>>>     public boolean isFixated()
>>>     {
>>>         return isFixated ;
>>>     }
>>> -    -    +
>>> +
>>>     /**
>>>      * Clears this tag's data of all bytes and values calculated so 
>>> all is as it
>>>      * was when this instance was created.
>>> @@ -70,13 +70,13 @@
>>>         numOctets = 1 ;
>>>         buf.clear() ;
>>>     }
>>> -    -    +
>>> +
>>>     /**
>>> -     * Fixates the data within this Length calculating all the 
>>> derived +     * Fixates the data within this Length calculating all 
>>> the derived
>>>      * properties from the existing set of octets.  While fixated 
>>> octets
>>>      * cannot be added.
>>> -     * +     *
>>>      * @throws org.apache.asn1.codec.DecoderException if this Length 
>>> is invalid
>>>      */
>>>     void fixate() throws DecoderException
>>> @@ -85,37 +85,52 @@
>>>         value = getLength( buf ) ;
>>>         isFixated = true ;
>>>     }
>>> -    -    +
>>> +
>>>     /**
>>>      * Adds an octet to this Length component and as a side effect 
>>> fixates the
>>>      * Length component if all the required length data has arrived.
>>> -     * +     *
>>>      * @param octet the 8 bit byte to add
>>>      */
>>>     void add( byte octet ) throws DecoderException
>>>     {
>>>         if ( isFixated )
>>> -        {  +        {
>>>             throw new IllegalStateException( "data added to fixated 
>>> length" ) ;
>>>         }
>>> -        +
>>>         buf.put( octet ) ;
>>> -        +
>>>         if ( buf.position() == 1 )
>>>         {
>>> -            // if its the long form
>>> -            if ( END_MASK == ( octet & END_MASK ) && ( octet & 0x7F 
>>> ) > 0 )
>>> +            // if its the long form, but not above 126 octets : 
>>> (1)111 1111 is not
>>> +            // allowed : this value is reserved for future extension.
>>> +            if ( END_MASK == ( octet & END_MASK ))
>>>             {
>>> -                // capture number of octets we need to compute length
>>> -                numOctets = octet & 0x7F ;
>>> +                int typeLength = octet & 0x7F;
>>> +
>>> +                if (typeLength == 0)
>>> +                {
>>> +                    numOctets = INDEFINITE;
>>> +                    fixate() ;
>>> +                }
>>> +                else if (typeLength == 0x7F)
>>> +                {
>>> +                    throw new DecoderException( "The number of 
>>> octets must not be 127 (reserved for future extension) " ) ;
>>> +                }
>>> +                else
>>> +                {
>>> +                    // capture number of octets we need to compute 
>>> length
>>> +                    numOctets = octet & 0x7F ;
>>> +                }
>>>             }
>>> -            else -            {    +            else
>>> +            {
>>>                 fixate() ;
>>>             }
>>>         }
>>> -        +
>>>         /*
>>>          * if we have collected all the octets needed for computing 
>>> the long
>>>          * form length so we need to calculate the length and just 
>>> fixate
>>> @@ -125,22 +140,22 @@
>>>             fixate() ;
>>>         }
>>>     }
>>> -    -    +
>>> +
>>>     /**
>>>      * Gets the length of the value.
>>> -     * +     *
>>>      * @return the length of the value
>>>      */
>>>     public int getLength()
>>>     {
>>>         return value ;
>>>     }
>>> -    -    +
>>> +
>>>     /**
>>>      * Gets the number of octets currently in this Length component.
>>> -     * +     *
>>>      * @return the number of octets currently within this Length 
>>> component
>>>      */
>>>     public int size()
>>> @@ -148,10 +163,10 @@
>>>         return buf.position() ;
>>>     }
>>>
>>> -    +
>>>     /**
>>>      * Decodes the length of a value for a tlv using the Length 
>>> field bytes.
>>> -     * +     *
>>>      * @param octets the length field bytes in the TLV
>>>      * @return the length of the TLV
>>>      * @throws DecoderException if the precision cannot hold the number
>>> @@ -167,20 +182,20 @@
>>>              */
>>>             throw new DecoderException( "Length number is too 
>>> large." ) ;
>>>         }
>>> -        +
>>>         byte octet = octets.get() ;
>>> -        +
>>>         // if we are using the short form then just return the first 
>>> octet
>>>         if ( ( octet & END_MASK ) == 0 )
>>>         {
>>>             return octet ;
>>>         }
>>> -        // using the indefinate form
>>> +        // using the indefinite form
>>>         else if ( ( octet & 0x7F ) == 0 )
>>>         {
>>> -            return INDEFINATE ;
>>> +            return INDEFINITE ;
>>>         }
>>> -        +
>>>         // using the long form so we calculate the length from all 
>>> octets
>>>         int length = 0 ;
>>>         for ( int ii = octets.remaining(), shift = (ii-1)<<3; ii > 
>>> 0; ii--, shift -= 8 )
>>> @@ -196,7 +211,7 @@
>>> //            shift += 8 ;
>>> //        }
>>> //        while ( octets.hasRemaining() ) ;
>>> -        +
>>>         return length ;
>>>     }
>>> }
>>>
>>> Modified: 
>>> incubator/directory/asn1/trunk/ber/src/test/org/apache/asn1/ber/LengthTest.java 
>>>
>>> URL: 
>>> http://svn.apache.org/viewcvs/incubator/directory/asn1/trunk/ber/src/test/org/apache/asn1/ber/LengthTest.java?view=diff&r1=155834&r2=155835 
>>>
>>> ============================================================================== 
>>>
>>> --- 
>>> incubator/directory/asn1/trunk/ber/src/test/org/apache/asn1/ber/LengthTest.java 
>>> (original)
>>> +++ 
>>> incubator/directory/asn1/trunk/ber/src/test/org/apache/asn1/ber/LengthTest.java 
>>> Tue Mar  1 14:46:31 2005
>>> @@ -237,4 +237,48 @@
>>>
>>>         assertEquals( 1, length.getLength() );
>>>     }
>>> +
>>> +    /**
>>> +     * Test that a Length could not begin with a 0xFF byte, which is
>>> +     * reserved for future extensions.
>>> +     *
>>> +     */
>>> +    public void testRestrictedValueForFutureExtension() +    {
>>> +        Length length = new Length();
>>> +
>>> +        try
>>> +        {
>>> +            length.add( (byte) 0xFF ) ;
>>> +            length.add( (byte) 0x01 ) ;
>>> +            fail( "should fail before we get here" ) ;
>>> +        }
>>> +        catch ( DecoderException t )
>>> +        {
>>> +            assertNotNull( t ) ;
>>> +        }
>>> +    }
>>> +
>>> +    /**
>>> +     * Test that an indefinite Length form is rejected. +     *
>>> +     */
>>> +    public void testIndefiniteLength() +    {
>>> +        Length length = new Length();
>>> +
>>> +        try
>>> +        {
>>> +            length.add( (byte) 0x80 ) ;
>>> +            length.add( (byte) 0x01 ) ;
>>> +            length.add( (byte) 0x00 ) ;
>>> +            length.add( (byte) 0x00 ) ;
>>> +            fail( "should fail before we get here" ) ;
>>> +        }
>>> +        catch ( Throwable t )
>>> +        {
>>> +            assertNotNull( t ) ;
>>> +        }
>>> +    }
>>> }
>>> +
>>>
>>>
>>>
>>>  
>>>


Re: [Fwd: svn commit: r155835 - in incubator/directory/asn1/trunk/ber/src: java/org/apache/asn1/ber/Length.java test/org/apache/asn1/ber/LengthTest.java]

Posted by Alex Karasulu <ao...@bellsouth.net>.
Alan D. Cabrera wrote:

> I think that it should be up to the branch owners to update what is 
> relevant for the work that they are performing.
>
Ok I thought we're all working this branch together.  However I will 
merge this change.

Thanks,
Alex

> Alex Karasulu wrote:
>
>> Alan,
>>
>> Could you apply this to the 'rewrite' branch as well?  In general if 
>> we make a change to the trunk it would be nice to apply fixes to 
>> branches as well.  Don't know if your branch 'ber-decoder' would take 
>> it though.
>>
>> Thanks,
>> Alex
>>
>> ------------------------------------------------------------------------
>>
>> Subject:
>> svn commit: r155835 - in incubator/directory/asn1/trunk/ber/src: 
>> java/org/apache/asn1/ber/Length.java 
>> test/org/apache/asn1/ber/LengthTest.java
>> From:
>> adc@apache.org
>> Date:
>> Tue, 01 Mar 2005 22:46:34 -0000
>> To:
>> directory-cvs@incubator.apache.org
>>
>> To:
>> directory-cvs@incubator.apache.org
>>
>> X-Account-Key:
>> account2
>> Return-Path:
>> <di...@incubator.apache.org> 
>>
>> Received:
>> from minotaur.apache.org ([209.237.227.194]) by 
>> imf04aec.mail.bellsouth.net (InterMail vM.5.01.06.11 
>> 201-253-122-130-111-20040605) with SMTP id 
>> <20...@minotaur.apache.org> 
>> for <ao...@bellsouth.net>; Tue, 1 Mar 2005 17:46:39 -0500
>> Received:
>> (qmail 66870 invoked by uid 1761); 1 Mar 2005 22:46:38 -0000
>> Delivered-To:
>> akarasulu@locus.apache.org
>> Received:
>> (qmail 66839 invoked from network); 1 Mar 2005 22:46:38 -0000
>> Received:
>> from hermes.apache.org (HELO mail.apache.org) (209.237.227.199) by 
>> minotaur.apache.org with SMTP; 1 Mar 2005 22:46:38 -0000
>> Received:
>> (qmail 11140 invoked by uid 500); 1 Mar 2005 22:46:37 -0000
>> Delivered-To:
>> apmail-akarasulu@apache.org
>> Received:
>> (qmail 11085 invoked by uid 500); 1 Mar 2005 22:46:36 -0000
>> Mailing-List:
>> contact directory-cvs-help@incubator.apache.org; run by ezmlm
>> Precedence:
>> bulk
>> List-Help:
>> <ma...@incubator.apache.org>
>> List-Unsubscribe:
>> <ma...@incubator.apache.org>
>> List-Post:
>> <ma...@incubator.apache.org>
>> List-Id:
>> <directory-cvs.incubator.apache.org>
>> Reply-To:
>> directory-dev@incubator.apache.org
>> Delivered-To:
>> mailing list directory-cvs@incubator.apache.org
>> Received:
>> (qmail 11071 invoked by uid 99); 1 Mar 2005 22:46:36 -0000
>> X-ASF-Spam-Status:
>> No, hits=-9.8 required=10.0 tests=ALL_TRUSTED,NO_REAL_NAME
>> X-Spam-Check-By:
>> apache.org
>> Received:
>> from minotaur.apache.org (HELO minotaur.apache.org) (209.237.227.194) 
>> by apache.org (qpsmtpd/0.28) with SMTP; Tue, 01 Mar 2005 14:46:36 -0800
>> Received:
>> (qmail 66781 invoked by uid 65534); 1 Mar 2005 22:46:34 -0000
>> Message-ID:
>> <20...@minotaur.apache.org>
>> Content-Type:
>> text/plain; charset="utf-8"
>> MIME-Version:
>> 1.0
>> Content-Transfer-Encoding:
>> quoted-printable
>> X-Mailer:
>> svnmailer-1.0.0-dev
>> X-Virus-Checked:
>> Checked
>> X-Spam-Rating:
>> minotaur.apache.org 1.6.2 0/1000/N
>>
>>
>>Author: adc
>>Date: Tue Mar  1 14:46:31 2005
>>New Revision: 155835
>>
>>URL: http://svn.apache.org/viewcvs?view=rev&rev=155835
>>Log:
>>The Length' s number of bytes must not be 127
>>http://issues.apache.org/jira/browse/DIRSNICKERS-102
>>
>>Modified:
>>    incubator/directory/asn1/trunk/ber/src/java/org/apache/asn1/ber/Length.java
>>    incubator/directory/asn1/trunk/ber/src/test/org/apache/asn1/ber/LengthTest.java
>>
>>Modified: incubator/directory/asn1/trunk/ber/src/java/org/apache/asn1/ber/Length.java
>>URL: http://svn.apache.org/viewcvs/incubator/directory/asn1/trunk/ber/src/java/org/apache/asn1/ber/Length.java?view=diff&r1=155834&r2=155835
>>==============================================================================
>>--- incubator/directory/asn1/trunk/ber/src/java/org/apache/asn1/ber/Length.java (original)
>>+++ incubator/directory/asn1/trunk/ber/src/java/org/apache/asn1/ber/Length.java Tue Mar  1 14:46:31 2005
>>@@ -32,8 +32,8 @@
>> public class Length
>> {
>>     /** used to mark length as indefinate */
>>-    public static final int INDEFINATE = -2 ;
>>-    /** used to mark length as undefined */ 
>>+    public static final int INDEFINITE = -2 ;
>>+    /** used to mark length as undefined */
>>     public static final int UNDEFINED = -1 ;
>>     /** the end long form terminate bit flag mask */
>>     public static final int END_MASK = 0x80 ;
>>@@ -44,21 +44,21 @@
>>     private int numOctets = UNDEFINED ;
>>     /** whether or not this length has been fixated */
>>     private boolean isFixated = false ;
>>-    /** a byte buffer used to collect the arriving length octets */ 
>>+    /** a byte buffer used to collect the arriving length octets */
>>     private final ByteBuffer buf = ByteBuffer.allocate( 5 ) ;
>> 
>> 
>>     /**
>>      * Checks to see if the length has been fixated.
>>-     * 
>>+     *
>>      * @return true if it is fixated, false if not
>>      */
>>     public boolean isFixated()
>>     {
>>         return isFixated ;
>>     }
>>-    
>>-    
>>+
>>+
>>     /**
>>      * Clears this tag's data of all bytes and values calculated so all is as it
>>      * was when this instance was created.
>>@@ -70,13 +70,13 @@
>>         numOctets = 1 ;
>>         buf.clear() ;
>>     }
>>-    
>>-    
>>+
>>+
>>     /**
>>-     * Fixates the data within this Length calculating all the derived 
>>+     * Fixates the data within this Length calculating all the derived
>>      * properties from the existing set of octets.  While fixated octets
>>      * cannot be added.
>>-     * 
>>+     *
>>      * @throws org.apache.asn1.codec.DecoderException if this Length is invalid
>>      */
>>     void fixate() throws DecoderException
>>@@ -85,37 +85,52 @@
>>         value = getLength( buf ) ;
>>         isFixated = true ;
>>     }
>>-    
>>-    
>>+
>>+
>>     /**
>>      * Adds an octet to this Length component and as a side effect fixates the
>>      * Length component if all the required length data has arrived.
>>-     * 
>>+     *
>>      * @param octet the 8 bit byte to add
>>      */
>>     void add( byte octet ) throws DecoderException
>>     {
>>         if ( isFixated )
>>-        {  
>>+        {
>>             throw new IllegalStateException( "data added to fixated length" ) ;
>>         }
>>-        
>>+
>>         buf.put( octet ) ;
>>-        
>>+
>>         if ( buf.position() == 1 )
>>         {
>>-            // if its the long form
>>-            if ( END_MASK == ( octet & END_MASK ) && ( octet & 0x7F ) > 0 )
>>+            // if its the long form, but not above 126 octets : (1)111 1111 is not
>>+        	// allowed : this value is reserved for future extension.
>>+            if ( END_MASK == ( octet & END_MASK ))
>>             {
>>-                // capture number of octets we need to compute length
>>-                numOctets = octet & 0x7F ;
>>+            	int typeLength = octet & 0x7F;
>>+
>>+            	if (typeLength == 0)
>>+            	{
>>+                    numOctets = INDEFINITE;
>>+                    fixate() ;
>>+            	}
>>+            	else if (typeLength == 0x7F)
>>+            	{
>>+            		throw new DecoderException( "The number of octets must not be 127 (reserved for future extension) " ) ;
>>+            	}
>>+            	else
>>+            	{
>>+	                // capture number of octets we need to compute length
>>+	                numOctets = octet & 0x7F ;
>>+            	}
>>             }
>>-            else 
>>-            {    
>>+            else
>>+            {
>>                 fixate() ;
>>             }
>>         }
>>-        
>>+
>>         /*
>>          * if we have collected all the octets needed for computing the long
>>          * form length so we need to calculate the length and just fixate
>>@@ -125,22 +140,22 @@
>>             fixate() ;
>>         }
>>     }
>>-    
>>-    
>>+
>>+
>>     /**
>>      * Gets the length of the value.
>>-     * 
>>+     *
>>      * @return the length of the value
>>      */
>>     public int getLength()
>>     {
>>         return value ;
>>     }
>>-    
>>-    
>>+
>>+
>>     /**
>>      * Gets the number of octets currently in this Length component.
>>-     * 
>>+     *
>>      * @return the number of octets currently within this Length component
>>      */
>>     public int size()
>>@@ -148,10 +163,10 @@
>>         return buf.position() ;
>>     }
>> 
>>-    
>>+
>>     /**
>>      * Decodes the length of a value for a tlv using the Length field bytes.
>>-     * 
>>+     *
>>      * @param octets the length field bytes in the TLV
>>      * @return the length of the TLV
>>      * @throws DecoderException if the precision cannot hold the number
>>@@ -167,20 +182,20 @@
>>              */
>>             throw new DecoderException( "Length number is too large." ) ;
>>         }
>>-        
>>+
>>         byte octet = octets.get() ;
>>-        
>>+
>>         // if we are using the short form then just return the first octet
>>         if ( ( octet & END_MASK ) == 0 )
>>         {
>>             return octet ;
>>         }
>>-        // using the indefinate form
>>+        // using the indefinite form
>>         else if ( ( octet & 0x7F ) == 0 )
>>         {
>>-            return INDEFINATE ;
>>+            return INDEFINITE ;
>>         }
>>-        
>>+
>>         // using the long form so we calculate the length from all octets
>>         int length = 0 ;
>>         for ( int ii = octets.remaining(), shift = (ii-1)<<3; ii > 0; ii--, shift -= 8 )
>>@@ -196,7 +211,7 @@
>> //            shift += 8 ;
>> //        }
>> //        while ( octets.hasRemaining() ) ;
>>-        
>>+
>>         return length ;
>>     }
>> }
>>
>>Modified: incubator/directory/asn1/trunk/ber/src/test/org/apache/asn1/ber/LengthTest.java
>>URL: http://svn.apache.org/viewcvs/incubator/directory/asn1/trunk/ber/src/test/org/apache/asn1/ber/LengthTest.java?view=diff&r1=155834&r2=155835
>>==============================================================================
>>--- incubator/directory/asn1/trunk/ber/src/test/org/apache/asn1/ber/LengthTest.java (original)
>>+++ incubator/directory/asn1/trunk/ber/src/test/org/apache/asn1/ber/LengthTest.java Tue Mar  1 14:46:31 2005
>>@@ -237,4 +237,48 @@
>> 
>>         assertEquals( 1, length.getLength() );
>>     }
>>+
>>+    /**
>>+     * Test that a Length could not begin with a 0xFF byte, which is
>>+     * reserved for future extensions.
>>+     *
>>+     */
>>+    public void testRestrictedValueForFutureExtension() 
>>+    {
>>+    	Length length = new Length();
>>+
>>+        try
>>+        {
>>+        	length.add( (byte) 0xFF ) ;
>>+        	length.add( (byte) 0x01 ) ;
>>+            fail( "should fail before we get here" ) ;
>>+        }
>>+        catch ( DecoderException t )
>>+        {
>>+            assertNotNull( t ) ;
>>+        }
>>+    }
>>+
>>+    /**
>>+     * Test that an indefinite Length form is rejected. 
>>+     *
>>+     */
>>+    public void testIndefiniteLength() 
>>+    {
>>+    	Length length = new Length();
>>+
>>+        try
>>+        {
>>+        	length.add( (byte) 0x80 ) ;
>>+        	length.add( (byte) 0x01 ) ;
>>+        	length.add( (byte) 0x00 ) ;
>>+        	length.add( (byte) 0x00 ) ;
>>+            fail( "should fail before we get here" ) ;
>>+        }
>>+        catch ( Throwable t )
>>+        {
>>+            assertNotNull( t ) ;
>>+        }
>>+    }
>> }
>>+
>>
>>
>>
>>  
>>


Re: [Fwd: svn commit: r155835 - in incubator/directory/asn1/trunk/ber/src: java/org/apache/asn1/ber/Length.java test/org/apache/asn1/ber/LengthTest.java]

Posted by "Alan D. Cabrera" <ad...@toolazydogs.com>.
I think that it should be up to the branch owners to update what is 
relevant for the work that they are performing.

Alex Karasulu wrote:

> Alan,
>
> Could you apply this to the 'rewrite' branch as well?  In general if 
> we make a change to the trunk it would be nice to apply fixes to 
> branches as well.  Don't know if your branch 'ber-decoder' would take 
> it though.
>
> Thanks,
> Alex
>
> ------------------------------------------------------------------------
>
> Subject:
> svn commit: r155835 - in incubator/directory/asn1/trunk/ber/src: 
> java/org/apache/asn1/ber/Length.java 
> test/org/apache/asn1/ber/LengthTest.java
> From:
> adc@apache.org
> Date:
> Tue, 01 Mar 2005 22:46:34 -0000
> To:
> directory-cvs@incubator.apache.org
>
> To:
> directory-cvs@incubator.apache.org
>
> X-Account-Key:
> account2
> Return-Path:
> <di...@incubator.apache.org> 
>
> Received:
> from minotaur.apache.org ([209.237.227.194]) by 
> imf04aec.mail.bellsouth.net (InterMail vM.5.01.06.11 
> 201-253-122-130-111-20040605) with SMTP id 
> <20...@minotaur.apache.org> 
> for <ao...@bellsouth.net>; Tue, 1 Mar 2005 17:46:39 -0500
> Received:
> (qmail 66870 invoked by uid 1761); 1 Mar 2005 22:46:38 -0000
> Delivered-To:
> akarasulu@locus.apache.org
> Received:
> (qmail 66839 invoked from network); 1 Mar 2005 22:46:38 -0000
> Received:
> from hermes.apache.org (HELO mail.apache.org) (209.237.227.199) by 
> minotaur.apache.org with SMTP; 1 Mar 2005 22:46:38 -0000
> Received:
> (qmail 11140 invoked by uid 500); 1 Mar 2005 22:46:37 -0000
> Delivered-To:
> apmail-akarasulu@apache.org
> Received:
> (qmail 11085 invoked by uid 500); 1 Mar 2005 22:46:36 -0000
> Mailing-List:
> contact directory-cvs-help@incubator.apache.org; run by ezmlm
> Precedence:
> bulk
> List-Help:
> <ma...@incubator.apache.org>
> List-Unsubscribe:
> <ma...@incubator.apache.org>
> List-Post:
> <ma...@incubator.apache.org>
> List-Id:
> <directory-cvs.incubator.apache.org>
> Reply-To:
> directory-dev@incubator.apache.org
> Delivered-To:
> mailing list directory-cvs@incubator.apache.org
> Received:
> (qmail 11071 invoked by uid 99); 1 Mar 2005 22:46:36 -0000
> X-ASF-Spam-Status:
> No, hits=-9.8 required=10.0 tests=ALL_TRUSTED,NO_REAL_NAME
> X-Spam-Check-By:
> apache.org
> Received:
> from minotaur.apache.org (HELO minotaur.apache.org) (209.237.227.194) 
> by apache.org (qpsmtpd/0.28) with SMTP; Tue, 01 Mar 2005 14:46:36 -0800
> Received:
> (qmail 66781 invoked by uid 65534); 1 Mar 2005 22:46:34 -0000
> Message-ID:
> <20...@minotaur.apache.org>
> Content-Type:
> text/plain; charset="utf-8"
> MIME-Version:
> 1.0
> Content-Transfer-Encoding:
> quoted-printable
> X-Mailer:
> svnmailer-1.0.0-dev
> X-Virus-Checked:
> Checked
> X-Spam-Rating:
> minotaur.apache.org 1.6.2 0/1000/N
>
>
>Author: adc
>Date: Tue Mar  1 14:46:31 2005
>New Revision: 155835
>
>URL: http://svn.apache.org/viewcvs?view=rev&rev=155835
>Log:
>The Length' s number of bytes must not be 127
>http://issues.apache.org/jira/browse/DIRSNICKERS-102
>
>Modified:
>    incubator/directory/asn1/trunk/ber/src/java/org/apache/asn1/ber/Length.java
>    incubator/directory/asn1/trunk/ber/src/test/org/apache/asn1/ber/LengthTest.java
>
>Modified: incubator/directory/asn1/trunk/ber/src/java/org/apache/asn1/ber/Length.java
>URL: http://svn.apache.org/viewcvs/incubator/directory/asn1/trunk/ber/src/java/org/apache/asn1/ber/Length.java?view=diff&r1=155834&r2=155835
>==============================================================================
>--- incubator/directory/asn1/trunk/ber/src/java/org/apache/asn1/ber/Length.java (original)
>+++ incubator/directory/asn1/trunk/ber/src/java/org/apache/asn1/ber/Length.java Tue Mar  1 14:46:31 2005
>@@ -32,8 +32,8 @@
> public class Length
> {
>     /** used to mark length as indefinate */
>-    public static final int INDEFINATE = -2 ;
>-    /** used to mark length as undefined */ 
>+    public static final int INDEFINITE = -2 ;
>+    /** used to mark length as undefined */
>     public static final int UNDEFINED = -1 ;
>     /** the end long form terminate bit flag mask */
>     public static final int END_MASK = 0x80 ;
>@@ -44,21 +44,21 @@
>     private int numOctets = UNDEFINED ;
>     /** whether or not this length has been fixated */
>     private boolean isFixated = false ;
>-    /** a byte buffer used to collect the arriving length octets */ 
>+    /** a byte buffer used to collect the arriving length octets */
>     private final ByteBuffer buf = ByteBuffer.allocate( 5 ) ;
> 
> 
>     /**
>      * Checks to see if the length has been fixated.
>-     * 
>+     *
>      * @return true if it is fixated, false if not
>      */
>     public boolean isFixated()
>     {
>         return isFixated ;
>     }
>-    
>-    
>+
>+
>     /**
>      * Clears this tag's data of all bytes and values calculated so all is as it
>      * was when this instance was created.
>@@ -70,13 +70,13 @@
>         numOctets = 1 ;
>         buf.clear() ;
>     }
>-    
>-    
>+
>+
>     /**
>-     * Fixates the data within this Length calculating all the derived 
>+     * Fixates the data within this Length calculating all the derived
>      * properties from the existing set of octets.  While fixated octets
>      * cannot be added.
>-     * 
>+     *
>      * @throws org.apache.asn1.codec.DecoderException if this Length is invalid
>      */
>     void fixate() throws DecoderException
>@@ -85,37 +85,52 @@
>         value = getLength( buf ) ;
>         isFixated = true ;
>     }
>-    
>-    
>+
>+
>     /**
>      * Adds an octet to this Length component and as a side effect fixates the
>      * Length component if all the required length data has arrived.
>-     * 
>+     *
>      * @param octet the 8 bit byte to add
>      */
>     void add( byte octet ) throws DecoderException
>     {
>         if ( isFixated )
>-        {  
>+        {
>             throw new IllegalStateException( "data added to fixated length" ) ;
>         }
>-        
>+
>         buf.put( octet ) ;
>-        
>+
>         if ( buf.position() == 1 )
>         {
>-            // if its the long form
>-            if ( END_MASK == ( octet & END_MASK ) && ( octet & 0x7F ) > 0 )
>+            // if its the long form, but not above 126 octets : (1)111 1111 is not
>+        	// allowed : this value is reserved for future extension.
>+            if ( END_MASK == ( octet & END_MASK ))
>             {
>-                // capture number of octets we need to compute length
>-                numOctets = octet & 0x7F ;
>+            	int typeLength = octet & 0x7F;
>+
>+            	if (typeLength == 0)
>+            	{
>+                    numOctets = INDEFINITE;
>+                    fixate() ;
>+            	}
>+            	else if (typeLength == 0x7F)
>+            	{
>+            		throw new DecoderException( "The number of octets must not be 127 (reserved for future extension) " ) ;
>+            	}
>+            	else
>+            	{
>+	                // capture number of octets we need to compute length
>+	                numOctets = octet & 0x7F ;
>+            	}
>             }
>-            else 
>-            {    
>+            else
>+            {
>                 fixate() ;
>             }
>         }
>-        
>+
>         /*
>          * if we have collected all the octets needed for computing the long
>          * form length so we need to calculate the length and just fixate
>@@ -125,22 +140,22 @@
>             fixate() ;
>         }
>     }
>-    
>-    
>+
>+
>     /**
>      * Gets the length of the value.
>-     * 
>+     *
>      * @return the length of the value
>      */
>     public int getLength()
>     {
>         return value ;
>     }
>-    
>-    
>+
>+
>     /**
>      * Gets the number of octets currently in this Length component.
>-     * 
>+     *
>      * @return the number of octets currently within this Length component
>      */
>     public int size()
>@@ -148,10 +163,10 @@
>         return buf.position() ;
>     }
> 
>-    
>+
>     /**
>      * Decodes the length of a value for a tlv using the Length field bytes.
>-     * 
>+     *
>      * @param octets the length field bytes in the TLV
>      * @return the length of the TLV
>      * @throws DecoderException if the precision cannot hold the number
>@@ -167,20 +182,20 @@
>              */
>             throw new DecoderException( "Length number is too large." ) ;
>         }
>-        
>+
>         byte octet = octets.get() ;
>-        
>+
>         // if we are using the short form then just return the first octet
>         if ( ( octet & END_MASK ) == 0 )
>         {
>             return octet ;
>         }
>-        // using the indefinate form
>+        // using the indefinite form
>         else if ( ( octet & 0x7F ) == 0 )
>         {
>-            return INDEFINATE ;
>+            return INDEFINITE ;
>         }
>-        
>+
>         // using the long form so we calculate the length from all octets
>         int length = 0 ;
>         for ( int ii = octets.remaining(), shift = (ii-1)<<3; ii > 0; ii--, shift -= 8 )
>@@ -196,7 +211,7 @@
> //            shift += 8 ;
> //        }
> //        while ( octets.hasRemaining() ) ;
>-        
>+
>         return length ;
>     }
> }
>
>Modified: incubator/directory/asn1/trunk/ber/src/test/org/apache/asn1/ber/LengthTest.java
>URL: http://svn.apache.org/viewcvs/incubator/directory/asn1/trunk/ber/src/test/org/apache/asn1/ber/LengthTest.java?view=diff&r1=155834&r2=155835
>==============================================================================
>--- incubator/directory/asn1/trunk/ber/src/test/org/apache/asn1/ber/LengthTest.java (original)
>+++ incubator/directory/asn1/trunk/ber/src/test/org/apache/asn1/ber/LengthTest.java Tue Mar  1 14:46:31 2005
>@@ -237,4 +237,48 @@
> 
>         assertEquals( 1, length.getLength() );
>     }
>+
>+    /**
>+     * Test that a Length could not begin with a 0xFF byte, which is
>+     * reserved for future extensions.
>+     *
>+     */
>+    public void testRestrictedValueForFutureExtension() 
>+    {
>+    	Length length = new Length();
>+
>+        try
>+        {
>+        	length.add( (byte) 0xFF ) ;
>+        	length.add( (byte) 0x01 ) ;
>+            fail( "should fail before we get here" ) ;
>+        }
>+        catch ( DecoderException t )
>+        {
>+            assertNotNull( t ) ;
>+        }
>+    }
>+
>+    /**
>+     * Test that an indefinite Length form is rejected. 
>+     *
>+     */
>+    public void testIndefiniteLength() 
>+    {
>+    	Length length = new Length();
>+
>+        try
>+        {
>+        	length.add( (byte) 0x80 ) ;
>+        	length.add( (byte) 0x01 ) ;
>+        	length.add( (byte) 0x00 ) ;
>+        	length.add( (byte) 0x00 ) ;
>+            fail( "should fail before we get here" ) ;
>+        }
>+        catch ( Throwable t )
>+        {
>+            assertNotNull( t ) ;
>+        }
>+    }
> }
>+
>
>
>
>  
>