From 099811eda0b0ab8997acb41d20dde090863bacf4 Mon Sep 17 00:00:00 2001 From: Anton Gorev Date: Wed, 10 Aug 2016 14:40:55 -0500 Subject: [PATCH 1/2] Fixed core dump in HuffmanEncoder::GenerateCodeLengths in case of only one leaf in tree. --- zdeflate.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/zdeflate.cpp b/zdeflate.cpp index a016b300..22b2d507 100644 --- a/zdeflate.cpp +++ b/zdeflate.cpp @@ -126,6 +126,15 @@ void HuffmanEncoder::GenerateCodeLengths(unsigned int *codeBits, unsigned int ma std::fill(codeBits, codeBits+nCodes, 0); return; } + + if (1 == nCodes - treeBegin) + { + // special case when only one leaf in tree + fill(codeBits, codeBits + nCodes, 0); + codeBits[tree[treeBegin].symbol] = 1; + return; + } + tree.resize(nCodes + nCodes - treeBegin - 1); size_t leastLeaf = treeBegin, leastInterior = nCodes; From 38b51748b695e670c7a0a0e766d5b550990c41c6 Mon Sep 17 00:00:00 2001 From: Anton Gorev Date: Wed, 10 Aug 2016 15:25:36 -0500 Subject: [PATCH 2/2] Forgotten std namespace. --- zdeflate.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zdeflate.cpp b/zdeflate.cpp index 22b2d507..a20f474c 100644 --- a/zdeflate.cpp +++ b/zdeflate.cpp @@ -130,7 +130,7 @@ void HuffmanEncoder::GenerateCodeLengths(unsigned int *codeBits, unsigned int ma if (1 == nCodes - treeBegin) { // special case when only one leaf in tree - fill(codeBits, codeBits + nCodes, 0); + std::fill(codeBits, codeBits + nCodes, 0); codeBits[tree[treeBegin].symbol] = 1; return; }