Movementは、Aptos Core内のMove VM値コーデックの非対称性を解決する重要なバグ修正をマージしました。この問題により、シリアライゼーション時に範囲外のvariantタグの受け入れが許可されていましたが、デシリアライゼーション時には拒否されるため、危険なミスマッチが生じていました。
問題点
RuntimeVariants値はu16 variant タグを持ちます。値をそのタグを説明していないレイアウトに対してシリアライズすると(例えば、enum アップグレードがvariantを導入する前にキャッシュされたレイアウト)、結果のバイトはデシリアライゼーション中に拒否されます。この非対称性は、状態をウェッジさせたり(書き込み可能だが読み取り不可能なリソース)、ブロックレベルのエラーを引き起こす可能性があります。
具体的なギャップはゼロフィールド範囲外タグでした。非空のペイロードを持つタグは既存のフィールドカウントチェックで既にキャッチされていましたが、ゼロフィールドタグはスルーされて、有効なvariantとして自動的にシリアライズされていました。
修正内容
seanyoungによるPR #411は、シリアライゼーション時に範囲外variantタグを拒否するように更新し、コーデックの両側が一致することを確認します。テストには、ゼロフィールド範囲外タグ(3、4、100、u16::MAX)がシリアライゼーションに失敗し、正規のunitvariantは引き続きラウンドトリップすることを検証するユニットテストが含まれます。エンドツーエンドのテストでは、修正がenumアップグレードとvariantミューテーションを正しく処理することを確認します。
この修正は、Movement ネットワークのコアVMの復元力を強化し、微妙だが潜在的に壊滅的なシリアライゼーション脆弱性を排除します。
