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

openSUSE Build Service is sponsored by