From 6b168ef9acce5d28d2bae71174b1279094605e51 Mon Sep 17 00:00:00 2001 From: "G.K.MacGregor" Date: Wed, 4 Nov 2020 23:23:39 +0000 Subject: [PATCH] Fix crash when loading too-short OL lines --- levelonepage.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/levelonepage.cpp b/levelonepage.cpp index bf2dae4..57c0d44 100644 --- a/levelonepage.cpp +++ b/levelonepage.cpp @@ -363,6 +363,17 @@ void LevelOnePage::loadPagePacket(QByteArray &inLine) setPacket(lineNumber, inLine); } else { int designationCode = inLine.at(0) & 0x3f; + if (inLine.size() < 40) + // OL is too short! + if (lineNumber == 26) { + // For a too-short enhancement triplets OL, first trim the line down to nearest whole triplet + inLine.resize((inLine.size() / 3 * 3) + 1); + // Then use "dummy" enhancement triplets to extend the line to the proper length + for (int i=inLine.size(); i<40; i+=3) + inLine.append("i^@"); // Address 41, Mode 0x1e, Data 0 + } else + // For other triplet OLs and Hamming 8/4 OLs, just pad with zero data + inLine.leftJustified(40, '@'); for (int i=1; i<=39; i++) inLine[i] = inLine.at(i) & 0x3f; setPacket(lineNumber, designationCode, inLine);