En bref, votre fichier est détecté comme JPEG car il commence par la même signature que ce type de fichier.
Corriger ce comportement dans Discourse est possible, mais cela nécessite une modification. (voir à la fin)
Voici quelques informations techniques.
Ce problème commence ici :
La bibliothèque FastImage ouvre le fichier et détermine le type et la taille.
Comme vous vous y attendez, elle renvoie un type JPEG.
Si vous regardez la signature JPEG, elle ressemble à ceci :
Maintenant, si vous regardez comment FastImage détecte un JPEG, vous pouvez voir ici :
Cependant, vous ne pouvez pas extraire d’informations d’image car tous les octets requis ne sont pas présents.
Comment résoudre ce problème dans Discourse ?
En regardant le code de FastImage, il y a une option précieuse que vous pouvez passer.
En utilisant cette option, toute erreur (SizeNotFound, ImageFetchFailure, CannotParseImage, UnknownImageType, BadImageURI) ne renverra aucune information d’image ; et votre fichier ne sera pas détecté comme une image.
@image_info =
begin
FastImage.new(@file, raise_on_failure: true)
rescue StandardError
nil
end
...
is_image ||= @image_info && FileHelper.is_supported_image?("test.#{@image_info.type}")