Skip to content

🔧 fix(TiffReader): ne pas rejeter un CR2 dont le MakerNote dépasse 64 Ko#26

Merged
ronan-develop merged 2 commits into
mainfrom
fix/#25-makernote-trop-gros
Jul 16, 2026
Merged

🔧 fix(TiffReader): ne pas rejeter un CR2 dont le MakerNote dépasse 64 Ko#26
ronan-develop merged 2 commits into
mainfrom
fix/#25-makernote-trop-gros

Conversation

@ronan-develop

Copy link
Copy Markdown
Owner

Closes #25

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 — 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. MakerNote est traversé, jamais lu. Le lire pour le jeter était du gaspillage à chaque appel.

Désormais

Cas Comportement
Valeur plus grande que le fichier CorruptedFileException — la structure ment
Valeur trop grosse pour nous intéresser non résolue, l'entrée reste traversable

Le risque §12.1 du plan, traité

Quatre générations de Canon 5D, onze ans d'écart :

Boîtier Année Fichier Preview
EOS 5D 2005 13 Mo 2496Ă—1664 âś…
EOS 5D Mark II 2008 27 Mo 5616Ă—3744 âś…
5D Mark II sRAW1 2008 15 Mo 5616Ă—3744 âś…
EOS 5D Mark IV 2016 62 Mo 6720Ă—4480 âś…

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.

OK (137 tests, 224 assertions)

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.
@ronan-develop
ronan-develop merged commit f3c5b03 into main Jul 16, 2026
6 checks passed
@ronan-develop
ronan-develop deleted the fix/#25-makernote-trop-gros branch July 16, 2026 20:26
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

đź”§ fix(TiffReader): MAX_VALUE_LENGTH rejette le MakerNote d'un CR2 valide

1 participant