[ 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)