You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@avro.apache.org by "ASF subversion and git services (Jira)" <ji...@apache.org> on 2023/06/16 19:13:00 UTC

[jira] [Commented] (AVRO-3783) [Java] Deserialize byte lengths as LONG but limit to INT

    [ https://issues.apache.org/jira/browse/AVRO-3783?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17733633#comment-17733633 ] 

ASF subversion and git services commented on AVRO-3783:
-------------------------------------------------------

Commit 1a14a00ea35220f7f6b0398cd6f01d936da3ec88 in avro's branch refs/heads/master from Jack Klamer
[ https://gitbox.apache.org/repos/asf?p=avro.git;h=1a14a00ea ]

AVRO-3783: Read LONG length for bytes, only allow INT sizes (#2210)

* Read long length for bytes. Only allow Int sizes

* Add test for VLE int long equality

> [Java] Deserialize byte lengths as LONG but limit to INT
> --------------------------------------------------------
>
>                 Key: AVRO-3783
>                 URL: https://issues.apache.org/jira/browse/AVRO-3783
>             Project: Apache Avro
>          Issue Type: Bug
>            Reporter: Jack Klamer
>            Assignee: Jack Klamer
>            Priority: Major
>              Labels: pull-request-available
>             Fix For: 1.11.2
>
>          Time Spent: 10m
>  Remaining Estimate: 0h
>
> In the spec, the encoding for the bytes type is bytes are encoded as a long followed by that many bytes of data.. In the Java binary decoders they are read as ints this is not a correctness issue because the VLE of the long is the same as that of an equivalently valued int. The int is used (I assume) to enable easier interop with the ByteBuffer java class. But in the rare cases where validly encoded data of more than MAX_ARRAY_SIZE bytes is found, this change will cause an error of
> {code}
> throw new UnsupportedOperationException(
>           "Cannot read arrays longer than " + MAX_ARRAY_SIZE + " bytes in Java library");
> {code}
> instead of
> {code}
> throw new InvalidNumberEncodingException("Invalid int encoding");
> {code}
> This type of checking is consistent with what happens in readString which reads its size as a long.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)