🔧 fix(TiffReader): ne pas rejeter un CR2 dont le MakerNote dépasse 64 Ko#26
Merged
Conversation
Un Canon EOS 5D (2005) levait CorruptedFileException sur un fichier parfaitement valide : Entrée 0x927C : 75080 octets de données annoncés, taille absurde. 0x927C est MakerNote, le bloc de métadonnées propriétaires du constructeur. 75 Ko y est parfaitement ordinaire. MAX_VALUE_LENGTH, garde-fou contre les fichiers hostiles, rejetait un fichier légitime — un faux positif de sécurité. Le plafond avait deux torts. Il était arbitraire : la vraie borne est la taille du fichier, une valeur ne pouvant pas déborder de ce qui la contient. Et il levait au lieu d'ignorer : aucun des neuf tags exploités par ce package n'approche 64 Ko — ce sont des offsets, des tailles, des dimensions, un nom de fabricant. MakerNote est traversé, jamais lu. Désormais : une valeur plus grande que le fichier lève (la structure ment) ; une valeur simplement trop grosse pour nous intéresser n'est pas résolue, et l'entrée reste traversable. Lire 75 Ko pour les jeter était du gaspillage à chaque appel. Vérifié sur quatre générations de 5D — 2005, 2008 (dont sRAW1) et 2016 — soit onze ans d'écart et du 12 au 30 Mpx. C'est le risque §12.1 du plan, traité.
Le Canon 5D de 2005 rejoint la liste après le fix du MakerNote. Quatre générations de la même lignée sont désormais couvertes — 2005, 2008 (dont sRAW1) et 2016, du 12 au 30 Mpx. C'est délibéré : la structure d'un RAW dérive entre générations, et c'est exactement là que les parseurs de format cassent. Le README le dit.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #25
Un Canon EOS 5D (2005) levait
CorruptedFileExceptionsur un fichier parfaitement valide :0x927Cest MakerNote — les métadonnées propriétaires du constructeur. 75 Ko y est parfaitement ordinaire.MAX_VALUE_LENGTH, garde-fou contre les fichiers hostiles, rejetait un fichier légitime : un faux positif de sécurité.Deux torts
Le plafond était arbitraire. La vraie borne est la taille du fichier : une valeur ne peut pas déborder de ce qui la contient. 64 Ko ne veut rien dire.
Il levait au lieu d'ignorer. Aucun des neuf tags exploités par ce package n'approche 64 Ko — ce sont des offsets, des tailles, des dimensions, un nom de fabricant.
MakerNoteest traversé, jamais lu. Le lire pour le jeter était du gaspillage à chaque appel.Désormais
CorruptedFileException— la structure mentLe risque §12.1 du plan, traité
Quatre générations de Canon 5D, onze ans d'écart :
Neuf appareils au total, zéro échec. Chaque preview est ouverte par
imagecreatefromstring(), et celle du 5D de 2005 a été vérifiée à l'œil : une charte X-Rite ColorChecker, couleurs justes.C'est le quatrième bug trouvé par des fichiers réels — aucun n'avait été vu par les tests.