Index: third_party/lcms2-2.6/0011-memory-leak-ReadSegmentedCurve.patch |
diff --git a/third_party/lcms2-2.6/0011-memory-leak-ReadSegmentedCurve.patch b/third_party/lcms2-2.6/0011-memory-leak-ReadSegmentedCurve.patch |
new file mode 100644 |
index 0000000000000000000000000000000000000000..a6cfe02b8c93b35fe10685f529837e5c72713db1 |
--- /dev/null |
+++ b/third_party/lcms2-2.6/0011-memory-leak-ReadSegmentedCurve.patch |
@@ -0,0 +1,36 @@ |
+diff --git a/third_party/lcms2-2.6/src/cmstypes.c b/third_party/lcms2-2.6/src/cmstypes.c |
+index 15199c7..04dd0c4 100644 |
+--- a/third_party/lcms2-2.6/src/cmstypes.c |
++++ b/third_party/lcms2-2.6/src/cmstypes.c |
+@@ -3968,7 +3968,7 @@ cmsToneCurve* ReadSegmentedCurve(struct _cms_typehandler_struct* self, cmsIOHAND |
+ case cmsSigSampledCurveSeg: { |
+ cmsUInt32Number Count; |
+ |
+- if (!_cmsReadUInt32Number(io, &Count)) return NULL; |
++ if (!_cmsReadUInt32Number(io, &Count)) goto Error; |
+ |
+ Segments[i].nGridPoints = Count; |
+ Segments[i].SampledPoints = (cmsFloat32Number*) _cmsCalloc(self ->ContextID, Count, sizeof(cmsFloat32Number)); |
+@@ -3987,7 +3987,7 @@ cmsToneCurve* ReadSegmentedCurve(struct _cms_typehandler_struct* self, cmsIOHAND |
+ _cmsTagSignature2String(String, (cmsTagSignature) ElementSig); |
+ cmsSignalError(self->ContextID, cmsERROR_UNKNOWN_EXTENSION, "Unknown curve element type '%s' found.", String); |
+ } |
+- return NULL; |
++ goto Error; |
+ |
+ } |
+ } |
+@@ -4001,7 +4001,12 @@ cmsToneCurve* ReadSegmentedCurve(struct _cms_typehandler_struct* self, cmsIOHAND |
+ return Curve; |
+ |
+ Error: |
+- if (Segments) _cmsFree(self ->ContextID, Segments); |
++ if (Segments) { |
++ for (i=0; i < nSegments; i++) { |
++ if (Segments[i].SampledPoints) _cmsFree(self ->ContextID, Segments[i].SampledPoints); |
++ } |
++ _cmsFree(self ->ContextID, Segments); |
++ } |
+ return NULL; |
+ } |
+ |