Ismaël Mejía created AVRO-4304:
----------------------------------
Summary: Add cross-SDK interop test vectors for malformed/rejected
binary encodings
Key: AVRO-4304
URL: https://issues.apache.org/jira/browse/AVRO-4304
Project: Apache Avro
Issue Type: Test
Components: csharp, interop, javascript, perl, c, php, ruby, c++,
java, python
Reporter: Ismaël Mejía
Assignee: Ismaël Mejía
h2. Summary
Decoder hardening across the SDKs now rejects a range of malformed binary
encodings (e.g. un-negatable {{Long.MIN_VALUE}}/{{INT64_MIN}} collection block
counts, negative/out-of-range union branch and enum symbol indices, overlong
varints, oversized and zero-byte-element collection block counts). These fixes
were made per SDK, but there is *no shared cross-language fixture* guaranteeing
that every SDK rejects the same malformed inputs identically. Without one, the
SDKs can drift (one accepts what another rejects).
h2. Proposed approach
* Add a set of shared "must-reject" interop vectors under {{share/test/}} --
each
vector being a small schema + a raw binary payload + the expectation that
decoding *fails* (with a bounded, well-defined error rather than a crash /
OOM / stack overflow).
* Wire a thin per-SDK test harness that loads the vectors and asserts each is
rejected, complementing the existing (positive) interop data.
* Seed it with the cases already fixed: {{Long.MIN_VALUE}}/{{INT64_MIN}} block
counts, negative and too-large union/enum indices, overlong (>10-byte)
varints, and oversized collection block counts.
h2. Relationship
* AVRO-4292 -- collection/allocation limits and the index/varint hardening whose
behavior these vectors lock in across languages.
* AVRO-4302 / AVRO-4283 -- once recursion-depth and decompressed-size limits
land, "too deep" and "decompression bomb" vectors can be added here too.
Recommend an umbrella with one subtask per SDK plus the shared fixtures.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)