From 6b4990a204f78ff16045a855e859edb5ed9b6dee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20T=C5=AFma?= Date: Tue, 2 Jan 2024 19:06:10 +0100 Subject: [PATCH] Fixed error handling --- src/map/gmifile.cpp | 34 ++++++++++++++++++++++------------ 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/src/map/gmifile.cpp b/src/map/gmifile.cpp index 66888661..c224a229 100644 --- a/src/map/gmifile.cpp +++ b/src/map/gmifile.cpp @@ -24,11 +24,6 @@ bool GmiFile::parse(QIODevice &device) int width, height; bool ok; - if (!device.open(QIODevice::ReadOnly)) { - _errorString = device.errorString(); - return false; - } - while (!device.atEnd()) { QByteArray line = device.readLine(4096); @@ -42,13 +37,13 @@ bool GmiFile::parse(QIODevice &device) else if (ln == 3) { width = line.toInt(&ok); if (!ok || width <= 0) { - _errorString = "Invalid image width"; + _errorString = line + ": invalid image width"; return false; } } else if (ln == 4) { height = line.toInt(&ok); if (!ok || height <= 0) { - _errorString = "Invalid image height"; + _errorString = line + ": invalid image height"; return false; } _size = QSize(width, height); @@ -56,19 +51,34 @@ bool GmiFile::parse(QIODevice &device) CalibrationPoint cp(calibrationPoint(line)); if (cp.isValid()) _points.append(cp); - else - break; + else { + if (_points.size() < 2) { + _errorString = line + ": invalid calibration point"; + return false; + } else + break; + } } ln++; } - device.close(); + if (ln < 6) { + _errorString = "Unexpected EOF"; + return false; + } - return (_points.size() >= 2); + return true; } -GmiFile::GmiFile(QIODevice &file) +GmiFile::GmiFile(QIODevice &file) : _valid(false) { + if (!file.open(QIODevice::ReadOnly)) { + _errorString = file.errorString(); + return; + } + _valid = parse(file); + + file.close(); }