You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@directory.apache.org by "Emmanuel Lecharny (JIRA)" <di...@incubator.apache.org> on 2005/02/11 01:25:12 UTC
[jira] Updated: (DIR-105) Bad encoding of tags number above 127
[ http://issues.apache.org/jira/browse/DIR-105?page=history ]
Emmanuel Lecharny updated DIR-105:
----------------------------------
Attachment: Tag.diff
TagTest.diff
Files that are to be modified :
.../directory/asn1/trunk/ber/src/java/org/apache/asn1/ber/Tag.java
.../directory/asn1/trunk/ber/src/test/org/apache/asn1/ber/TagTest.java
NB : Just launch the Junit Test ! I can't assure that this is bullet proof (my dev-env is quit messy actually)...
> Bad encoding of tags number above 127
> -------------------------------------
>
> Key: DIR-105
> URL: http://issues.apache.org/jira/browse/DIR-105
> Project: Directory
> Type: Bug
> Reporter: Emmanuel Lecharny
> Assignee: Alex Karasulu
> Priority: Minor
> Attachments: Tag.diff, TagTest.diff
>
> Tere is a bug in functions :
> org.apache.asn1.ber.Tag.getTagId(byte[])
> and
> org.apache.asn1.ber.Tag.getTagId(TagOctetCollector)
> when the tag has a number above 127 - which may be very unlikely to happen ! -. In this case, bytes are decoded in the revert order :
> ...
> // calculate tag value w/ long tag format
> for( int ii = 1 ; ii < octets.length; ii++ )
> {
> int shift = ( ii - 1 ) * 7 ;
> id |= ( octets[ii] & LONG_MASK ) << shift ;
> }
> ...
> should be :
> ...
> // calculate tag value w/ long tag format
> for ( int ii = 1; ii < octets.length; ii++ )
> {
> id = (id << 7) | (octets[ii] & LONG_MASK);
> }
> ...
> in both functions.
> The test case should also be corrected, as value are create din the revert order in test
> org.apache.asn1.bertestGetTagIdByteArray() :
> ...
> octets[1] = (byte)(ii & Tag.LONG_MASK);
> octets[2] = (byte)((ii >> 7) & Tag.LONG_MASK);
> ...
> should be :
> ...
> octets[1] = (byte)((ii >> 7) & Tag.LONG_MASK);
> octets[2] = (byte)(ii & Tag.LONG_MASK);
> ...
> and
> ...
> octets[1] = (byte)(ii & Tag.LONG_MASK);
> octets[2] = (byte)((ii >> 7) & Tag.LONG_MASK);
> octets[3] = (byte)((ii >> 14) & Tag.LONG_MASK);
> ...
> should be :
> ...
> octets[1] = (byte)((ii >> 14) & Tag.LONG_MASK);
> octets[2] = (byte)((ii >> 7) & Tag.LONG_MASK);
> octets[3] = (byte)(ii & Tag.LONG_MASK);
> ...
> Function org.apache.asn1.ber.Tag.getTagId(int) seems to works correctly - although not tested.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://issues.apache.org/jira/secure/Administrators.jspa
-
If you want more information on JIRA, or have a bug to report see:
http://www.atlassian.com/software/jira