Crash instead of clean error parsing malformed CDL/CTF files (null derefs at CDLParser.cpp:355 and DynamicProperty.cpp:317)
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 2/5
- Temps estimé
- 1-3 heures
- Accessibilité débutants
- 61/100
Piste de recherche
Commence par lire src/OpenColorIO/fileformats/cdl/CDLParser.cpp vers la ligne 355 et les deux endroits où m_parsingInfo est assigné (près de :577 et :630) pour voir pourquoi un <ProcessList> vide le laisse null. Pour le second crash, lis DynamicProperty.cpp:317 avec la gestion du conteneur dans CTFReaderHelper.cpp:1742-1750 qui construit un transform avec une hue curve null. Compile avec ASan, exécute les deux reproducers du rapport (fichiers de 56 octets et 21 octets) et confirme que le résultat est une erreur de parsing plutôt qu'un SEGV. Note que les reporters ont déjà des guard patches et ont proposé des PRs, donc vérifie avec un maintainer avant de commencer.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
Summary
Fuzzing the file-reading paths of current master (22dd9c4, 2026-09-30)
found two null-pointer dereferences where malformed color files crash the
process instead of producing a clean parse error. Per SECURITY.md
("reading malformed data should produce an error, not a crash") these are
filed as bugs. Both are deterministic (5/5 each under ASan), no memory
corruption observed. We have two-line guard patches for both and are happy
to send PRs.
1. CDLParser::validateParsing dereferences null parsing info
Site: src/OpenColorIO/fileformats/cdl/CDLParser.cpp:355
const CDLTransformVec& pTransformList = getCDLParsingInfo()->m_transforms;
m_parsingInfo is only populated when CDL/CCC container elements are
parsed (CDLParser.cpp:577/:630). A <ProcessList> document whose body
never contains such an element leaves the info RcPtr null, and the line
above dereferences it. Minimal reproducer (56 bytes):
<ProcessList>
</ProcessList>
ASan: SEGV in CDLParser::Impl::validateParsing() const
(CDLParser.cpp:356), 5/5 deterministic; a valid CDL seed parses clean.
Suggested fix: null-check the parsing info and throw the standard parse
error instead.
2. Grading hue-curve dynamic property validates a null curve
Site: src/OpenColorIO/DynamicProperty.cpp:317
void DynamicPropertyGradingHueCurveImpl::setValue(const ConstGradingHueCurveRcPtr & value)
{
value->validate();
With malformed input, the reader's grading path builds a transform whose
hue curve is a null ConstGradingHueCurveRcPtr (container handling around
CTFReaderHelper.cpp:1742-1750), and setValue calls validate() on it.
Minimal reproducer (21 bytes):
<ColorDecisionListn/>
(the typo'd root element is intentional; matching is by content, so the
file needs no particular extension). ASan: SEGV in
DynamicPropertyGradingHueCurveImpl::setValue, 5/5 deterministic.
Suggested fix: guard if (!value) throw ... or skip creating the dynamic
property when the curve is null.
Notes
- Harness: parse-only driver over the file-format read path
(GetCachedFileAndFormat), ASan + libFuzzer, no GPU/codegen. - Both PoCs are complete files, deterministic across 5 runs each; the
56-byte and 21-byte contents above are the whole reproducers. - CWE-476, availability only; no corruption observed.
- Found by our own fuzzing harness; analysis was AI-assisted.
- Langage dominant
- C++
- Étoiles
- 2.1k
- Forks
- 508
- Métriques de merge des PR
- Aucune PR mergée en 30 j
Préparer son environnement
- Aucun Dockerfile ni fichier Docker Compose
- Aucun modèle de pull request
- Lire le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de AcademySoftwareFoundation/OpenColorIO
-
Inconsistent run-time library usage for locale handling breaks GPU code generation on some systems.Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 86/100
AcademySoftwareFoundation/OpenColorIO#2351 · 2 commentaires ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 84/100
-
Difficulté 2/5 1-3 heures Accessibilité débutants 82/100
-
Build failure on GCC/MinGW (MXE): std::ifstream constructor mismatch with Platform::filenameToUTF()Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
-
ReadTheDocs - OS DeprecationOuverteDocumentation
Difficulté 1/5 Moins d'une heure Accessibilité débutants 72/100
AcademySoftwareFoundation/OpenColorIO#2280 · 1 commentaire ·
Toutes les issues de AcademySoftwareFoundation/OpenColorIO
Issues similaires
-
std::fdim drops partial derivative w.r.t second argument in forward and reverse modePeut-être pris @ADITYASINGH1206 l’a pris aujourd’hui. Ouverte
Difficulté 1/5 Moins d'une heure Accessibilité débutants 85/100
vgvassilev/clad#2534 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 70/100
Les mainteneurs répondent en général sous 1 jour
-
Integer underflow and buffer overrun in detail::count_rows on disconnected distance matricesOuverte
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
Les mainteneurs répondent en général sous 3 jours
-
HAP.cpp fixOuverte
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
-
bug
Difficulté 2/5 1-3 heures Accessibilité débutants 65/100
ardia-browser/ardia#1942 ·
Les mainteneurs répondent en général sous 1 jour