Fix memory leak in lcms, MPEmatrix_Read

BUG=650277

Review-Url: https://codereview.chromium.org/2371723003
diff --git a/third_party/lcms2-2.6/0008-memory-leak-Type_MPEmatrix_Read.patch b/third_party/lcms2-2.6/0008-memory-leak-Type_MPEmatrix_Read.patch
new file mode 100644
index 0000000..93ee3d3
--- /dev/null
+++ b/third_party/lcms2-2.6/0008-memory-leak-Type_MPEmatrix_Read.patch
@@ -0,0 +1,30 @@
+diff --git a/third_party/lcms2-2.6/src/cmstypes.c b/third_party/lcms2-2.6/src/cmstypes.c
+index 441d6bb..15199c7 100644
+--- a/third_party/lcms2-2.6/src/cmstypes.c
++++ b/third_party/lcms2-2.6/src/cmstypes.c
+@@ -4203,7 +4203,11 @@ void *Type_MPEmatrix_Read(struct _cms_typehandler_struct* self, cmsIOHANDLER* io
+ 
+         cmsFloat32Number v;
+ 
+-        if (!_cmsReadFloat32Number(io, &v)) return NULL;
++        if (!_cmsReadFloat32Number(io, &v)) {
++            _cmsFree(self ->ContextID, Matrix);
++            _cmsFree(self ->ContextID, Offsets);
++            return NULL;
++        }
+         Matrix[i] = v;
+     }
+ 
+@@ -4212,7 +4216,11 @@ void *Type_MPEmatrix_Read(struct _cms_typehandler_struct* self, cmsIOHANDLER* io
+ 
+         cmsFloat32Number v;
+ 
+-        if (!_cmsReadFloat32Number(io, &v)) return NULL;
++        if (!_cmsReadFloat32Number(io, &v)) {
++            _cmsFree(self ->ContextID, Matrix);
++            _cmsFree(self ->ContextID, Offsets);
++            return NULL;
++        }
+         Offsets[i] = v;
+     }
+ 
diff --git a/third_party/lcms2-2.6/README.pdfium b/third_party/lcms2-2.6/README.pdfium
index 4fcd32b..2947939 100644
--- a/third_party/lcms2-2.6/README.pdfium
+++ b/third_party/lcms2-2.6/README.pdfium
@@ -17,4 +17,5 @@
 0005-memory-leak-AllocEmptyTransform.patch: Fix memory leak in AllocEmptyTransform.
 0006-memory-leak-Type_NamedColor_Read.patch: Fix memory leak in Type_NamedColor_Read.
 0007-memory-leak-OptimizeByResampling.patch: Fix memory leak in OptimizeByResampling.
+0008-memory-leak-Type_MPEmatrix_Read.patch: Fix memory leak in MPEmatrix_Read.
 TODO(ochang): List other patches.
diff --git a/third_party/lcms2-2.6/src/cmstypes.c b/third_party/lcms2-2.6/src/cmstypes.c
index 441d6bb..15199c7 100644
--- a/third_party/lcms2-2.6/src/cmstypes.c
+++ b/third_party/lcms2-2.6/src/cmstypes.c
@@ -4203,7 +4203,11 @@
 
         cmsFloat32Number v;
 
-        if (!_cmsReadFloat32Number(io, &v)) return NULL;
+        if (!_cmsReadFloat32Number(io, &v)) {
+            _cmsFree(self ->ContextID, Matrix);
+            _cmsFree(self ->ContextID, Offsets);
+            return NULL;
+        }
         Matrix[i] = v;
     }
 
@@ -4212,7 +4216,11 @@
 
         cmsFloat32Number v;
 
-        if (!_cmsReadFloat32Number(io, &v)) return NULL;
+        if (!_cmsReadFloat32Number(io, &v)) {
+            _cmsFree(self ->ContextID, Matrix);
+            _cmsFree(self ->ContextID, Offsets);
+            return NULL;
+        }
         Offsets[i] = v;
     }