--- poppler/Gfx.cc.old 2016-05-29 19:14:06.373218269 +0200 +++ poppler/Gfx.cc 2016-05-29 19:46:15.789308287 +0200 @@ -4495,6 +4495,7 @@ void Gfx::doImage(Object *ref, Stream *s if (smaskObj.isStream()) { // soft mask if (inlineImg) { + delete colorMap; goto err1; } maskStr = smaskObj.getStream(); @@ -4505,6 +4506,9 @@ void Gfx::doImage(Object *ref, Stream *s maskDict->lookup("W", &obj1); } if (!obj1.isInt()) { + delete colorMap; + maskObj.free(); + smaskObj.free(); goto err2; } maskWidth = obj1.getInt(); @@ -4515,6 +4519,9 @@ void Gfx::doImage(Object *ref, Stream *s maskDict->lookup("H", &obj1); } if (!obj1.isInt()) { + delete colorMap; + maskObj.free(); + smaskObj.free(); goto err2; } maskHeight = obj1.getInt(); @@ -4535,6 +4542,9 @@ void Gfx::doImage(Object *ref, Stream *s maskDict->lookup("BPC", &obj1); } if (!obj1.isInt()) { + delete colorMap; + maskObj.free(); + smaskObj.free(); goto err2; } maskBits = obj1.getInt(); @@ -4556,6 +4566,9 @@ void Gfx::doImage(Object *ref, Stream *s maskColorSpace = GfxColorSpace::parse(NULL, &obj1, out, state); obj1.free(); if (!maskColorSpace || maskColorSpace->getMode() != csDeviceGray) { + delete colorMap; + maskObj.free(); + smaskObj.free(); goto err1; } maskDict->lookup("Decode", &obj1); @@ -4567,6 +4580,9 @@ void Gfx::doImage(Object *ref, Stream *s obj1.free(); if (!maskColorMap->isOk()) { delete maskColorMap; + delete colorMap; + maskObj.free(); + smaskObj.free(); goto err1; } // handle the Matte entry @@ -4612,6 +4628,9 @@ void Gfx::doImage(Object *ref, Stream *s } else { error(errSyntaxError, -1, "Mask entry should be an integer but it's of type {0:d}", obj1.getType()); obj1.free(); + delete colorMap; + maskObj.free(); + smaskObj.free(); goto err1; } obj1.free(); @@ -4620,6 +4639,9 @@ void Gfx::doImage(Object *ref, Stream *s } else if (maskObj.isStream()) { // explicit mask if (inlineImg) { + delete colorMap; + maskObj.free(); + smaskObj.free(); goto err1; } maskStr = maskObj.getStream(); @@ -4630,6 +4652,9 @@ void Gfx::doImage(Object *ref, Stream *s maskDict->lookup("W", &obj1); } if (!obj1.isInt()) { + delete colorMap; + maskObj.free(); + smaskObj.free(); goto err2; } maskWidth = obj1.getInt(); @@ -4640,6 +4665,9 @@ void Gfx::doImage(Object *ref, Stream *s maskDict->lookup("H", &obj1); } if (!obj1.isInt()) { + delete colorMap; + maskObj.free(); + smaskObj.free(); goto err2; } maskHeight = obj1.getInt(); @@ -4660,6 +4688,9 @@ void Gfx::doImage(Object *ref, Stream *s maskDict->lookup("IM", &obj1); } if (!obj1.isBool() || !obj1.getBool()) { + delete colorMap; + maskObj.free(); + smaskObj.free(); goto err2; } obj1.free(); @@ -4678,6 +4709,9 @@ void Gfx::doImage(Object *ref, Stream *s } obj2.free(); } else if (!obj1.isNull()) { + delete colorMap; + maskObj.free(); + smaskObj.free(); goto err2; } obj1.free();