Duplicated properties in serialisation payload
オープン
まだ誰も着手していません。
Category: Engine
Feature
Status: Requires RFC
- 主要言語
- C
- スター
- 40.4k
- フォーク
- 8.2k
- 平均マージ
- 2日 13時間
- マージ済み PR(30日)
- 96
説明
Description
Opening this as a reminder for the below.
@TimWolla: https://github.com/php/php-src/pull/22588#discussion_r3523424963
It is legal for properties to appear twice in serialization payload?! This probably should be deprecated and killed.
class TestDefault {
public readonly int $prop = 1;
}
var_dump($s = serialize(new TestDefault));
var_dump(unserialize($s));
// Unserialization still bypasses normal readonly assignment semantics.
var_dump(unserialize("O:11:\"TestDefault\":0:{}"));
var_dump(unserialize("O:11:\"TestDefault\":1:{s:4:\"prop\";i:2;}"));
var_dump(unserialize("O:11:\"TestDefault\":2:{s:4:\"prop\";i:2;s:4:\"prop\";i:3;}"));
string(38) "O:11:"TestDefault":1:{s:4:"prop";i:1;}"
object(TestDefault)#1 (1) {
["prop"]=>
int(1)
}
object(TestDefault)#1 (1) {
["prop"]=>
int(1)
}
object(TestDefault)#1 (1) {
["prop"]=>
int(2)
}
object(TestDefault)#1 (1) {
["prop"]=>
int(3)
}
PHP Version
N/A
Operating System
No response
コントリビューションガイド
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
調査の方向性
まず、issue にある serialize() と unserialize() の例を再現し、readonly フィールド上の単一のプロパティと重複したプロパティを比較します。プロパティの復元を担うシリアライズおよびアンシリアライズのエントリーポイントを追跡します。重複したプロパティの意図された動作について、deprecated とするか削除するかも含めて合意され、その動作がリグレッションテストでカバーされれば完了です。
索引モデルが issue の本文から書いたものです。
評価
- 技術スタック
- php
- 領域
- backend
- issue の種類
- バグ
- 難易度
- 5/5
- 見積もり時間
- 1週間以上
- 活発さ
- 静か
- 明瞭さ
- おおむね明確
- 初心者へのやさしさ
- 38/100