Images JPG mal renseignées parfois #5723

Closed
opened 2 weeks ago by rastapopoulos · 1 comments
Owner

Suite du ticket #5699 toujours sur la même fonction.

Dans ce dernier ticket, il apparaissait que la fonction était cassée pour les infos d'images depuis environ 2 ans.

Mais 8 mois avant, il me semble qu'il y a eu une autre cassure ici : d391613169

En effet, cette modif utilise la fonction _image_trouver_extension_depuis_mime() qui uniformise tous les MIME reconnus pour les JPG, avec l'extension ".jpeg" ! (avec un E) et ça l'utilise pour comparer avec formats_image_acceptables().

Sauf que ça ne fait pas juste ça, ensuite ça utilise cette extension dans les infos officielles de l'image avec $a['extension'] = $extension;.

Alors que partout dans SPIP, pour les spip_documents, SPIP fait en sorte d'uniformiser tous les JPG avec l'extension… ".jpg" ! Ce qui est l'extension associée dans spip_types_documents.

À cause de ça, dans certains cas, on se retrouve alors avec un spip_documents de type "jpeg", càd d'un type qui n'est PAS reconnu par spip_types_documents. Et donc ensuite plusieurs endroits où c'est pas affiché, où ça bugue etc.

Depuis les modifs 8 mois après qui ajoutent distant_trouver_extension_selon_headers() , on ne devrait pas/plus appeler _image_trouver_extension_depuis_mime(). En effet, à cet endroit du code, si on entre dans strpos($mime_type, 'image/') === 0 c'est alors obligatoirement qu'on a $mime_type rempli, et donc qu'on est rentré dans le if ($headers) {, et donc qu'on a déjà un $extension = distant_trouver_extension_selon_headers($source, $headers) rempli et non false. Donc il faut l'utiliser tel quel.

Et/ou autre solution : _image_trouver_extension_depuis_mime() est censée absolument renvoyer "jpg" et non "jpeg" pour l'ensemble des MIME JPG, car c'est cette extension là qui est la référence dans SPIP. "jpg" passera aussi le test de `formats_image_acceptables()" donc il n'y a aucun problème à ce changement.

Suite du ticket #5699 toujours sur la même fonction. Dans ce dernier ticket, il apparaissait que la fonction était cassée *pour les infos d'images* depuis environ 2 ans. Mais 8 mois avant, il me semble qu'il y a eu une autre cassure ici : https://git.spip.net/spip/spip/commit/d3916131698a6413adf5ae1e73c504563cb7fc94 En effet, cette modif utilise la fonction `_image_trouver_extension_depuis_mime()` qui uniformise tous les MIME reconnus pour les JPG, avec l'extension ".jpeg" ! (avec un E) et ça l'utilise pour comparer avec `formats_image_acceptables()`. Sauf que ça ne fait pas juste ça, ensuite ça utilise cette extension dans les infos officielles de l'image avec `$a['extension'] = $extension;`. Alors que partout dans SPIP, pour les spip_documents, SPIP fait en sorte d'uniformiser tous les JPG avec l'extension… ".jpg" ! Ce qui est l'extension associée dans spip_types_documents. À cause de ça, *dans certains cas*, on se retrouve alors avec un spip_documents de type "jpeg", càd d'un type qui n'est PAS reconnu par spip_types_documents. Et donc ensuite plusieurs endroits où c'est pas affiché, où ça bugue etc. Depuis les modifs 8 mois après qui ajoutent `distant_trouver_extension_selon_headers()` , on ne *devrait pas/plus* appeler `_image_trouver_extension_depuis_mime()`. En effet, à cet endroit du code, si on entre dans `strpos($mime_type, 'image/') === 0` c'est alors obligatoirement qu'on a `$mime_type` rempli, et donc qu'on est rentré dans le `if ($headers) {`, et donc *qu'on a déjà* un `$extension = distant_trouver_extension_selon_headers($source, $headers)` rempli et non false. Donc il faut l'utiliser tel quel. Et/ou autre solution : `_image_trouver_extension_depuis_mime()` est censée absolument renvoyer "jpg" et non "jpeg" pour l'ensemble des MIME JPG, car c'est cette extension là qui est la référence dans SPIP. "jpg" passera aussi le test de `formats_image_acceptables()" donc il n'y a aucun problème à ce changement.
Poster
Owner

Test : ne faire QUE remplacer $terminaison = 'jpeg'; par $terminaison = 'jpg'; dans la fonction _image_trouver_extension_depuis_mime corrige bien le problème des images mal renseignées, qui finissent à cause de ça avec extension=jpeg dans spip_documents. Avec ce changement ça remarche tout bien pour ça.

MAIS

En contrepartie, ça pète totalement plein de choses dans les fonctions de transformation d'image, et même les simples tests GD2, Convert etc sur la page "Fonctions avancées" ne marchent plus !

Ce qui est en théorie n'importe quoi, puisque l'extension ".jpg" est parfaitement correcte aussi pour travailler sur ces images… Mais le fait est que ce changement pète plein de chose. Donc on peut pas se contenter de ça…

Test : ne faire QUE remplacer `$terminaison = 'jpeg';` par `$terminaison = 'jpg';` dans la fonction `_image_trouver_extension_depuis_mime` corrige bien le problème des images mal renseignées, qui finissent à cause de ça avec extension=jpeg dans spip_documents. Avec ce changement ça remarche tout bien pour ça. MAIS En contrepartie, ça pète totalement plein de choses dans les fonctions de transformation d'image, et même les simples tests GD2, Convert etc sur la page "Fonctions avancées" ne marchent plus ! Ce qui est en théorie n'importe quoi, puisque l'extension ".jpg" est parfaitement correcte aussi pour travailler sur ces images… Mais le fait est que ce changement pète plein de chose. Donc on peut pas se contenter de ça…
rastapopoulos referenced this issue from a commit 1 week ago
rastapopoulos referenced this issue from a commit 1 week ago
rastapopoulos referenced this issue from a commit 1 week ago
marcimat closed this issue 1 week ago
marcimat referenced this issue from a commit 1 week ago
Sign in to join this conversation.
No Milestone
No project
No Assignees
1 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#5723
Loading…
There is no content yet.