From 604986e90ff6e2812fa3d6471366737adea65f07 Mon Sep 17 00:00:00 2001 From: Chocobo1 Date: Fri, 1 Sep 2023 00:18:03 +0800 Subject: [PATCH] Perform type conversion properly Closes #19521. PR #19525. --- src/base/utils/io.cpp | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/base/utils/io.cpp b/src/base/utils/io.cpp index 902297d6d..afe4c4deb 100644 --- a/src/base/utils/io.cpp +++ b/src/base/utils/io.cpp @@ -28,6 +28,8 @@ #include "io.h" +#include + #include #include @@ -89,11 +91,20 @@ nonstd::expected Utils::IO::readFile(const Pat return nonstd::make_unexpected(ReadError {ReadError::ExceedSize, message}); } -#if (QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)) - QByteArray ret {fileSize, Qt::Uninitialized}; +#if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)) + using ByteArraySizeType = qsizetype; #else - QByteArray ret {static_cast(fileSize), Qt::Uninitialized}; + using ByteArraySizeType = int; #endif + if ((fileSize < std::numeric_limits::min()) + || (fileSize > std::numeric_limits::max())) + { + const QString message = QCoreApplication::translate("Utils::IO", "File size exceeds data size limit. File: \"%1\". File size: %2. Array limit: %3") + .arg(file.fileName(), QString::number(fileSize), QString::number(std::numeric_limits::max())); + return nonstd::make_unexpected(ReadError {ReadError::ExceedSize, message}); + } + + QByteArray ret {static_cast(fileSize), Qt::Uninitialized}; const qint64 actualSize = file.read(ret.data(), fileSize); if (actualSize < 0)