From bd704045e6c9831f844baab9bed4e860ffa9671c Mon Sep 17 00:00:00 2001 From: Albert Astals Cid Date: Sun, 31 Mar 2019 01:35:33 +0100 Subject: [PATCH] xcf: Don't crash with files with unsupported layer modes --- src/imageformats/xcf.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/imageformats/xcf.cpp b/src/imageformats/xcf.cpp index a12aab0..43a7d80 100644 --- a/src/imageformats/xcf.cpp +++ b/src/imageformats/xcf.cpp @@ -244,6 +244,12 @@ bool XCFImageFormat::random_table_initialized; QVector XCFImageFormat::grayTable; +template +constexpr size_t countof(T(&)[N]) +{ + return N; +} + const XCFImageFormat::LayerModes XCFImageFormat::layer_modes[] = { {true}, // NORMAL_MODE {true}, // DISSOLVE_MODE @@ -709,6 +715,10 @@ bool XCFImageFormat::loadLayerProperties(QDataStream &xcf_io, Layer &layer) case PROP_MODE: property >> layer.mode; + if (layer.mode >= countof(layer_modes)) { + qWarning() << "Found layer with unsupported mode" << layer.mode << "Defaulting to mode 0"; + layer.mode = 0; + } break; case PROP_TATTOO: