php / php/php-src

Duplicated properties in serialisation payload

Abierto
#22,599 0 comentarios 1 reacción 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Category: Engine Feature Status: Requires RFC
Lenguaje dominante
C
Estrellas
40.4k
Forks
8.2k
Merge medio
2 d 13 h
PR fusionados (30 d)
96

Descripción

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

Guía de contribución

Abrir la guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Línea de trabajo

Comienza reproduciendo los ejemplos de serialize() y unserialize() del issue, comparando las propiedades individuales y duplicadas en campos readonly. Sigue los puntos de entrada de serialización y unserialización responsables de restaurar las propiedades. El trabajo estará completo cuando se haya acordado el comportamiento previsto de las propiedades duplicadas, incluyendo si debería marcarse como deprecated o eliminarse, y el comportamiento esté cubierto por pruebas de regresión.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Stack tecnológico
php
Área
backend
Tipo de issue
Error
Dificultad
5/5
Tiempo estimado
Más de una semana
Estado de actividad
Tranquilo
Claridad
Bastante claro
Aptitud para principiantes
38/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.