You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@fory.apache.org by GitBox <gi...@apache.org> on 2026/06/30 20:18:35 UTC
[GH] (fory/row-codec-schema-versions): Workflow run "Fory CI" is working again!
The GitHub Actions job "Fory CI" on fory.git/row-codec-schema-versions has succeeded.
Run started by GitHub user stevenschlansker (triggered by stevenschlansker).
Head commit for run:
0e3480ed5c058e3c55b8d833a72f5b0888274911 / Claude (on behalf of Steven Schlansker) <st...@apache.org>
fix(format): delimit struct children in row-codec strict schema hash
SchemaHistory.hashField mixed a StructType's constant name then recursed
into its children with no boundary marker. A struct's arity is variable
(unlike list/map, whose arity is fixed by the type kind), so
{a: struct<x>, b} and {a: struct<x, b>} mixed an identical byte sequence
and produced the same 64-bit strict hash. A non-injective strict hash can
route an older payload to the wrong projection codec or trip the
build-time collision guard on a legitimate evolution. Mix the struct's
child count before recursing so the hash stays injective over nesting.
Also tighten visibility and remove duplicate paths surfaced by review:
hoist the duplicated typeCtx() (the synthesize-interfaces resolution
context) into the shared BaseCodecBuilder owner; drop MapCodecBuilder's
one-line combinedHash forwarder in favor of calling
SchemaHistory.combineHashes directly; and narrow computeStrictSchemaHash
to package-private for the new test.
Add SchemaHistoryTest covering the struct-boundary collision, its minimal
empty-struct form, and that structurally identical schemas still hash
equal.
Report URL: https://github.com/apache/fory/actions/runs/28472892155
With regards,
GitHub Actions via GitBox
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@fory.apache.org
For additional commands, e-mail: commits-help@fory.apache.org