File 0016-Make-sure-that-path-passed-to-WriteData-is-block-device.patch of Package kpmcore
From 4ef17463ff360403b25fd6abd216ac2a188589b3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Andrius=20=C5=A0tikonas?= <andrius@stikonas.eu>
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)
--
GitLab