From 4ef17463ff360403b25fd6abd216ac2a188589b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrius=20=C5=A0tikonas?= Date: Sat, 5 Feb 2022 14:42:17 +0000 Subject: [PATCH] Make sure that path passed to WriteData is block device. --- src/util/externalcommandhelper.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/util/externalcommandhelper.cpp b/src/util/externalcommandhelper.cpp index 665e4da..a52f4aa 100644 --- a/src/util/externalcommandhelper.cpp +++ b/src/util/externalcommandhelper.cpp @@ -291,7 +291,7 @@ QByteArray ExternalCommandHelper::ReadData(const QString& device, const qint64 o if (length > MiB) { return {}; } - if (!std::filesystem::is_block_file(device.toStdString())) { + if (!std::filesystem::is_block_file(device.toStdU16String())) { qWarning() << "Not a block device"; return {}; } @@ -313,7 +313,15 @@ bool ExternalCommandHelper::WriteData(const QByteArray& buffer, const QString& t if ( targetDevice.left(5) != QStringLiteral("/dev/") ) return false; - return writeData(targetDevice, buffer, targetOffset); + auto targetPath = std::filesystem::path(targetDevice.toStdU16String()); + if (!std::filesystem::is_block_file(targetDevice.toStdU16String())) { + qWarning() << "Not a block device"; + return {}; + } + + auto canonicalTargetPath = std::filesystem::canonical(targetPath); + + return writeData(QLatin1String(canonicalTargetPath.c_str()), buffer, targetOffset); } QVariantMap ExternalCommandHelper::RunCommand(const QString& command, const QStringList& arguments, const QByteArray& input, const int processChannelMode)