diff --git a/OpenEXR/IlmImf/ImfFastHuf.cpp b/OpenEXR/IlmImf/ImfFastHuf.cpp index 3e00bdd7db..9ccf2e15d5 100644 --- a/OpenEXR/IlmImf/ImfFastHuf.cpp +++ b/OpenEXR/IlmImf/ImfFastHuf.cpp @@ -256,14 +256,29 @@ FastHufDecoder::FastHufDecoder int symbol = *i >> 6; if (mapping[codeLen] >= static_cast(_numSymbols)) + { + delete[] _idToSymbol; + _idToSymbol = NULL; throw IEX_NAMESPACE::InputExc ("Huffman decode error " "(Invalid symbol in header)."); - + } _idToSymbol[mapping[codeLen]] = symbol; mapping[codeLen]++; } - buildTables(base, offset); + // + // exceptions can be thrown whilst building tables. Delete + // _idToSynmbol before re-throwing to prevent memory leak + // + try + { + buildTables(base, offset); + }catch(...) + { + delete[] _idToSymbol; + _idToSymbol = NULL; + throw; + } }