According to the following code:
  public ArrayBackedTag(byte tagType, byte[] tag) {
    int tagLength = tag.length + TYPE_LENGTH_SIZE;
    if (tagLength > MAX_TAG_LENGTH) {
      throw new IllegalArgumentException(
          "Invalid tag data being passed. Its length can not exceed " + 
MAX_TAG_LENGTH);
    }
    length = TAG_LENGTH_SIZE + tagLength;
    bytes = new byte[length];
    int pos = Bytes.putAsShort(bytes, 0, tagLength);
    pos = Bytes.putByte(bytes, pos, tagType);
    Bytes.putBytes(bytes, pos, tag, 0, tag.length);
    this.type = tagType;
  }
The layout of the byte array should be:
|tag legnth (2 bytes)|tag type(1 byte)|tag|

It seems to me that the "bytes[offset + TYPE_LENGTH_SIZE]" is correct.

On 2017-08-06 16:35, Lars George <lars.geo...@gmail.com> wrote: 
> Hi,
> 
> I found this reading through tags in 1.3, but checked in trunk as
> well. There is this code:
> 
>   public ArrayBackedTag(byte[] bytes, int offset, int length) {
>     if (length > MAX_TAG_LENGTH) {
>       throw new IllegalArgumentException(
>           "Invalid tag data being passed. Its length can not exceed "
> + MAX_TAG_LENGTH);
>     }
>     this.bytes = bytes;
>     this.offset = offset;
>     this.length = length;
>     this.type = bytes[offset + TAG_LENGTH_SIZE];
>   }
> 
> I am concerned about the last line of the code, using the wrong constant?
> 
>   public final static int TYPE_LENGTH_SIZE = Bytes.SIZEOF_BYTE;
>   public final static int TAG_LENGTH_SIZE = Bytes.SIZEOF_SHORT;
> 
> Should this not read
> 
>     this.type = bytes[offset + TYPE_LENGTH_SIZE];
> 
> Would this not read the type from the wrong place in the array?
> 
> Cheers,
> Lars
> 

Reply via email to