[ 
https://issues.apache.org/jira/browse/KAFKA-8013?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Jason Gustafson resolved KAFKA-8013.
------------------------------------
    Resolution: Fixed

> Avoid buffer underflow when reading a Struct from a partially correct buffer
> ----------------------------------------------------------------------------
>
>                 Key: KAFKA-8013
>                 URL: https://issues.apache.org/jira/browse/KAFKA-8013
>             Project: Kafka
>          Issue Type: Bug
>            Reporter: Konstantine Karantasis
>            Assignee: Konstantine Karantasis
>            Priority: Major
>             Fix For: 2.3.0
>
>
> Protocol compatibility can be facilitated if a {{Struct}}, that has been 
> defined as an extension of a previous {{Struct}} by adding fields at the end 
> of the older version, can read an older version by ignoring the absence of 
> the missing new fields. Of course this has to be allowed by the definition of 
> these fields (they have to be {{nullable}}). 
> For example, this should work: 
> {code:java}
> Schema oldSchema = new Schema(new Field("field1", Type.NULLABLE_STRING));
> Schema newSchema = new Schema(new Field("field1", Type.NULLABLE_STRING), new 
> Field("field2" , Type.NULLABLE_STRING));
> String value = "foo bar baz";
> Struct oldFormat = new Struct(oldSchema).set("field1", value);
> ByteBuffer buffer = ByteBuffer.allocate(oldSchema.sizeOf(oldFormat));
> oldFormat.writeTo(buffer);
> buffer.flip();
> Struct newFormat = newSchema.read(buffer);
> assertEquals(value, newFormat.get("field1"));
> assertEquals(null, newFormat.get("field2"));
> {code}
> Currently it does not. 
> A fix to the above is considered safe, because depending on buffer underflow 
> to detect missing data at the end of a {{Struct}} is not an appropriate 
> check. 



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to