summaryrefslogtreecommitdiff
path: root/src/cmsio0.c
diff options
context:
space:
mode:
authorMarti Maria <mmaria@abindustries.com>2022-01-13 09:22:15 +0100
committerMarti Maria <mmaria@abindustries.com>2022-01-13 09:22:15 +0100
commit8fa85769e7d61bbb3b6e731ff5e935b0b63a1469 (patch)
treef850235762615743a7263446ee0e854d0f42acb2 /src/cmsio0.c
parent2e2055e59d50e41194c24a780507e11bb7beca0b (diff)
downloadlcms2-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.c15
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];