diff --git a/src/app/crash/read_document.cpp b/src/app/crash/read_document.cpp index 3a71191ad..eb7316f44 100644 --- a/src/app/crash/read_document.cpp +++ b/src/app/crash/read_document.cpp @@ -343,14 +343,18 @@ private: } // Read color space - gfx::ColorSpacePtr colorSpace = readColorSpace(s); - if (colorSpace) - spr->setColorSpace(colorSpace); + if (!s.eof()) { + gfx::ColorSpacePtr colorSpace = readColorSpace(s); + if (colorSpace) + spr->setColorSpace(colorSpace); + } // Read grid bounds - gfx::Rect gridBounds = readGridBounds(s); - if (!gridBounds.isEmpty()) - spr->setGridBounds(gridBounds); + if (!s.eof()) { + gfx::Rect gridBounds = readGridBounds(s); + if (!gridBounds.isEmpty()) + spr->setGridBounds(gridBounds); + } return spr.release(); } @@ -360,6 +364,12 @@ private: const gfx::ColorSpace::Flag flags = (gfx::ColorSpace::Flag)read16(s); const double gamma = fixmath::fixtof(read32(s)); const size_t n = read32(s); + + // If the color space file is to big, it's because the sprite file + // is invalid or or from an old session without color spcae. + if (n > 1024*1024*64) // 64 MB is too much for an ICC file + return nullptr; + std::vector buf(n); if (n) s.read((char*)&buf[0], n);