En resumen, tu archivo está siendo detectado como JPEG porque comienza con la misma firma que este tipo de archivo.
Es posible solucionar este comportamiento en Discourse, pero requiere una modificación. (ver al final)
Aquí hay algo técnico.
Este problema comienza aquí:
La biblioteca FastImage abre el archivo y determina el tipo y el tamaño.
Como esperas, devuelve un tipo JPEG.
Ahora, si miras cómo FastImage detecta un JPEG, puedes verlo aquí:
Sin embargo, no puedes extraer ninguna información de la imagen ya que no están todos los bytes requeridos.
¿Cómo solucionamos este problema en Discourse?
Mirando el código de FastImage, hay una opción valiosa que puedes pasar.
Al usar esta opción, cualquier error (SizeNotFound, ImageFetchFailure, CannotParseImage, UnknownImageType, BadImageURI) no devolverá información de imagen; y tu archivo no será detectado como una imagen.
@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}")