From 4b9a09b302818b43dfdc67ffd7e0c650797f2763 Mon Sep 17 00:00:00 2001 From: Mikhail Medvedev Date: Sun, 28 Jan 2024 12:57:32 +0300 Subject: [PATCH] Fixed program crash on chip size mismatch with INTEL hex file size --- IMSProg_programmer/dialogabout.cpp | 2 +- IMSProg_programmer/mainwindow.cpp | 25 +++++++++++++++++-------- 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/IMSProg_programmer/dialogabout.cpp b/IMSProg_programmer/dialogabout.cpp index 06fcdf9..bd16081 100644 --- a/IMSProg_programmer/dialogabout.cpp +++ b/IMSProg_programmer/dialogabout.cpp @@ -23,7 +23,7 @@ DialogAbout::DialogAbout(QWidget *parent) : ui->label_7->setTextFormat(Qt::RichText); ui->label_7->setTextInteractionFlags(Qt::TextBrowserInteraction); ui->label_7->setOpenExternalLinks(true); - ui->label_8->setText("V1.1.9"); + ui->label_8->setText("V1.1.10"); } DialogAbout::~DialogAbout() diff --git a/IMSProg_programmer/mainwindow.cpp b/IMSProg_programmer/mainwindow.cpp index 947d6f7..85b6615 100644 --- a/IMSProg_programmer/mainwindow.cpp +++ b/IMSProg_programmer/mainwindow.cpp @@ -1625,6 +1625,11 @@ void MainWindow::on_actionImport_from_Intel_HEX_triggered() if (currStr[0] != ':') { QMessageBox::about(this, tr("Error"), tr("Not valid HEX format!")); + file.close(); + fileName.clear(); + hexEdit->setData(chipData); + ui->progressBar->setValue(0); + ui->crcEdit->setText(getCRC32()); return; } strVal = currStr.mid(1,2); //Length of data in current string @@ -1635,14 +1640,6 @@ void MainWindow::on_actionImport_from_Intel_HEX_triggered() strVal = currStr.mid(3,4); lo_addr = hexToInt(strVal); counter = counter + static_cast((lo_addr) >> 8) + static_cast(lo_addr & 0x00ff); - - if (hi_addr * 256 * 256 + lo_addr > static_cast(chipSize)) - { - QMessageBox::about(this, tr("Error"), tr("The address is larger than the size of the chip!")); - - return; - } - strVal.clear(); //command strVal = currStr.mid(7,2); command = hexToInt(strVal); @@ -1656,6 +1653,18 @@ void MainWindow::on_actionImport_from_Intel_HEX_triggered() strVal.clear(); //get current byte of string strVal = currStr.mid(int(i) * 2 + 9, 2); currByte = static_cast(hexToInt(strVal)); + // Checking valid address + if (hi_addr * 256 * 256 + lo_addr + i > static_cast(chipSize)) + { + QMessageBox::about(this, tr("Error"), tr("The address is larger than the size of the chip!")); + file.close(); + fileName.clear(); + hexEdit->setData(chipData); + ui->progressBar->setValue(0); + ui->crcEdit->setText(getCRC32()); + return; + } + chipData.data()[hi_addr * 256 * 256 + lo_addr + i] = char(currByte); counter = counter + static_cast(hexToInt(strVal));