[
https://issues.apache.org/jira/browse/KAFKA-15423?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Sakshi Malik reassigned KAFKA-15423:
------------------------------------
Assignee: Sakshi Malik
> readUnsignedVarint implementation allows for negative numbers
> -------------------------------------------------------------
>
> Key: KAFKA-15423
> URL: https://issues.apache.org/jira/browse/KAFKA-15423
> Project: Kafka
> Issue Type: Improvement
> Components: clients
> Affects Versions: 3.5.1
> Reporter: Philip Warren
> Assignee: Sakshi Malik
> Priority: Minor
>
> The current implementation of {{ByteUtils.readUnsignedVarint}} throws an
> IllegalArgumentException if the varint is encoded in more than 5 bytes which
> avoids some invalid values, however it still allows for 35 bits of precision
> instead of 31 bits of the underlying int type.
> To make the method safer for callers, it seems like it should ensure that
> only the 3 lower bits of the 5th byte are set as anything else will overflow
> a Java int.
> I've audited the codebase and there are some cases where a negative unsigned
> varint will lead to calling {{new Object[length]}} (leading to an exception),
> and a few potential values where reading a varint as a length (and
> subtracting one) causes a negative length of MIN_INT to wrap and become equal
> to MAX_INT.
> As the KIP specs refer to varints as 31-bit integers (i.e.
> [KIP-482|https://cwiki.apache.org/confluence/display/KAFKA/KIP-482]), it
> would be good if the methods decoding them should also enforce this
> constraint.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)