Ultrabug created AVRO-3240:
------------------------------

             Summary: Schema deserialization is not backwards compatible
                 Key: AVRO-3240
                 URL: https://issues.apache.org/jira/browse/AVRO-3240
             Project: Apache Avro
          Issue Type: Bug
          Components: rust
            Reporter: Ultrabug


Hello,

 

When providing your own schema to `from_avro_datum`, the deserialization is not 
backward compatible with messages containing a previous schema even if the 
schemas are created to be backward compatible.

This is due to the `decode_variable` function in `utils` returning 
`Error::ReadVariableIntegerBytes` when the reader object is smaller than 
expected when reading a message with previous schema version (which is indeed 
smaller) and trying to decode it with a backward compatible schema.

I have fixed the issue locally with the following patch which I will submit as 
a PR

 

```
diff --git a/lang/rust/src/util.rs b/lang/rust/src/util.rs
index f9daf285..3538399e 100644
--- a/lang/rust/src/util.rs
+++ b/lang/rust/src/util.rs
@@ -96,7 +96,7 @@ fn decode_variable<R: Read>(reader: &mut R) -> 
AvroResult<u64> {
 }
 reader
 .read_exact(&mut buf[..])
- .map_err(Error::ReadVariableIntegerBytes)?;
+ .or(Ok(()))?; // return nullable to support avro schemas backward 
compatibility
 i |= (u64::from(buf[0] & 0x7F)) << (j * 7);
 if (buf[0] >> 7) == 0 {
 break;
```



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to