diff options
author | Marti Maria <mmaria@abindustries.com> | 2022-01-13 09:22:15 +0100 |
---|---|---|
committer | Marti Maria <mmaria@abindustries.com> | 2022-01-13 09:22:15 +0100 |
commit | 8fa85769e7d61bbb3b6e731ff5e935b0b63a1469 (patch) | |
tree | f850235762615743a7263446ee0e854d0f42acb2 /src/cmsio0.c | |
parent | 2e2055e59d50e41194c24a780507e11bb7beca0b (diff) | |
download | lcms2-8fa85769e7d61bbb3b6e731ff5e935b0b63a1469.tar.gz |
fix ASAN reported error
Reading corrupted tags twice was returning a pointer instead of NULL. That confused Raw/Cooked tag logic. Thanks to Lexy Lee for reporting the issue.
Diffstat (limited to 'src/cmsio0.c')
-rw-r--r-- | src/cmsio0.c | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/src/cmsio0.c b/src/cmsio0.c index e1c97cd..9f4edba 100644 --- a/src/cmsio0.c +++ b/src/cmsio0.c @@ -479,10 +479,10 @@ cmsBool CMSEXPORT cmsCloseIOhandler(cmsIOHANDLER* io) cmsIOHANDLER* CMSEXPORT cmsGetProfileIOhandler(cmsHPROFILE hProfile) { - _cmsICCPROFILE* Icc = (_cmsICCPROFILE*)hProfile; + _cmsICCPROFILE* Icc = (_cmsICCPROFILE*)hProfile; - if (Icc == NULL) return NULL; - return Icc->IOhandler; + if (Icc == NULL) return NULL; + return Icc->IOhandler; } // Creates an empty structure holding all required parameters @@ -1618,6 +1618,13 @@ void* CMSEXPORT cmsReadTag(cmsHPROFILE hProfile, cmsTagSignature sig) // Return error and unlock the data Error: + + if (Icc->TagPtrs[n] != NULL) + { + _cmsFree(Icc->ContextID, Icc->TagPtrs[n]); + Icc->TagPtrs[n] = NULL; + } + _cmsUnlockMutex(Icc->ContextID, Icc ->UsrMutex); return NULL; } @@ -1783,7 +1790,7 @@ cmsUInt32Number CMSEXPORT cmsReadRawTag(cmsHPROFILE hProfile, cmsTagSignature si // It is already read? if (Icc -> TagPtrs[i] == NULL) { - // No yet, get original position + // Not yet, get original position Offset = Icc ->TagOffsets[i]; TagSize = Icc ->TagSizes[i]; |