ecrire_config('forums_titre', 'oui') provoque une notice en PHP 8.2 #5599

Closed
opened 2 weeks ago by RealET · 6 comments
RealET commented 2 weeks ago

Bonjour,

Je teste le plugin ieconfig avec SPIP 4.2.2 + PHP 8.2.
Et à l'importation d'une sauvegarde, j'ai eu plein de notice :
Notice: unserialize(): Error at offset 0 of 3 bytes in ecrire\inc\config.php on line 210

Et c'est des écritures du type :
ecrire_config('forums_titre', 'oui');
qui provoquent la notice.

C'est la ligne https://git.spip.net/spip/spip/src/branch/4.2/ecrire/inc/config.php#L210

Il n'y a aucune vérification que la donnée déserialisée est effectivement serialisée.

WordPress a 2 fonctions pour cela :
https://github.com/WordPress/wordpress-develop/blob/trunk/src/wp-includes/functions.php#L648
Et l'usage de @ pour masquer une éventuelle erreur.

PHP 8.3 annonce durcir le message d'erreur de notice à warning : https://php.watch/versions/8.3/unserialize-E-WARNING

PS : c'est https://git.spip.net/spip-contrib-extensions/ieconfig/src/branch/master/formulaires/ieconfig_import.php#L208 qui fait l'appel.

Mais j'ai préféré faire le ticket ici car ça me semble être un problème au cœur de SPIP.

Bonjour, Je teste le plugin ieconfig avec SPIP 4.2.2 + PHP 8.2. Et à l'importation d'une sauvegarde, j'ai eu plein de notice : Notice: `unserialize(): Error at offset 0 of 3 bytes in ecrire\inc\config.php on line 210` Et c'est des écritures du type : `ecrire_config('forums_titre', 'oui');` qui provoquent la notice. C'est la ligne https://git.spip.net/spip/spip/src/branch/4.2/ecrire/inc/config.php#L210 Il n'y a aucune vérification que la donnée déserialisée est effectivement serialisée. WordPress a 2 fonctions pour cela : https://github.com/WordPress/wordpress-develop/blob/trunk/src/wp-includes/functions.php#L648 Et l'usage de @ pour masquer une éventuelle erreur. PHP 8.3 annonce durcir le message d'erreur de notice à warning : https://php.watch/versions/8.3/unserialize-E-WARNING PS : c'est https://git.spip.net/spip-contrib-extensions/ieconfig/src/branch/master/formulaires/ieconfig_import.php#L208 qui fait l'appel. Mais j'ai préféré faire le ticket ici car ça me semble être un problème au cœur de SPIP.
RealET commented 2 weeks ago
Poster

Et, au cas où, un ticket dans le plugin ieconfig : spip-contrib-extensions/ieconfig#4

Et, au cas où, un ticket dans le plugin ieconfig : https://git.spip.net/spip-contrib-extensions/ieconfig/issues/4
b_b commented 2 weeks ago
Owner

En rapport avec !5520 ?

En rapport avec !5520 ?
b_b added this to the 4.2 milestone 2 weeks ago
b_b added the
à confirmer
label 2 weeks ago
Owner

Je viens de vérifier et non, pas d’erreur chez moi sans le / :

# pas d’erreur
ecrire_config('forums_titre', 'non');

# erreur
ecrire_config('forums_titre/', 'non');

# pas d’erreur
ecrire_config('forums_titre/', ['rien' => 'oui']);

Mais préciser le / indique bien qu’on remplit un array…
Cela dit dans le cas

ecrire_config('forums_titre/', 'non');

Il arrive malgré l’erreur à écrire la valeur attendue… (forums_titre => 'non')

Je viens de vérifier et non, pas d’erreur chez moi sans le `/` : ```php # pas d’erreur ecrire_config('forums_titre', 'non'); # erreur ecrire_config('forums_titre/', 'non'); # pas d’erreur ecrire_config('forums_titre/', ['rien' => 'oui']); ``` Mais préciser le `/` indique bien qu’on remplit un array… Cela dit dans le cas ```php ecrire_config('forums_titre/', 'non'); ``` Il arrive malgré l’erreur à écrire la valeur attendue… (forums_titre => 'non')
RealET commented 2 weeks ago
Poster

Mais oui @marcimat , tu as raison, le code de ieconfig rajoute ce /

Donc, l'erreur serait chez lui…

Mais oui @marcimat , tu as raison, le code de ieconfig rajoute ce `/` Donc, l'erreur serait chez lui…
RealET referenced this issue from a commit 2 weeks ago
b_b commented 2 weeks ago
Owner

Et donc on peut fermer ici ?

Et donc on peut fermer ici ?
RealET closed this issue 2 weeks ago
RealET commented 2 weeks ago
Poster

J'ai fermé, mais le test sur est-ce déserialisable, ça reste quand même une vraie question.

J'ai fermé, mais le test sur est-ce déserialisable, ça reste quand même une vraie question.
Sign in to join this conversation.
No Milestone
No project
No Assignees
3 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: spip/spip#5599
Loading…
There is no content yet.