Bug: chaînes de caractères au lieu d'entiers (ecrire/inc/filtres_images_lib_mini.php)
Version 4.0.5 ; Php 8.0
Fichier ecrire/inc/filtres_images_lib_mini.php
Il s'agit d'un Spip 1.X qui a 20 ans et qui a régulièrement été mis à jour à chaque nouvelle sortie de Spip sauf depuis juillet dernier, et qui a migré hier de 3.2 en 4.0.5 (et de php 7.4 en php 8.0).
On a une erreur car on passe un string à la fonction round(). Cela arrive quand on veut ouvrir un article en mode rédacteur avec une vignette (doit dépendre de la vignette, ça ne me le fait pas pour tous les articles).
Lignes 1664 et 1254 environ.
Le fix que j'ai appliqué est de convertir les arguments concernés en int dès le début de la fonction. Cela donne :
function _image_tag_changer_taille($tag, $width, $height, $style = false) {
$width = intval($width);
$height = intval($height);
...
et
function _image_ratio($srcWidth, $srcHeight, $maxWidth, $maxHeight) {
$srcWidth = intval($srcWidth);
$srcHeight = intval($srcHeight);
$maxWidth = intval($maxWidth);
$maxHeight = intval($maxHeight);
Il y a peut-être d'autres fonctions concernées. J'ai cru voir qu'en 4.1.X ces fonctions ont des arguements typés : Il faudra s'assurer que les fonctions qui les appellent leur envoie bien des strings. Un phpstan (level 6 min ?) doit être capable de détecter ça.