From c8ecfc05baea732224e5a5a38ad3abb1d782207c Mon Sep 17 00:00:00 2001
From: Andreas Traczyk <andreas.traczyk@savoirfairelinux.com>
Date: Mon, 7 Mar 2022 15:08:39 -0500
Subject: [PATCH] vcard: don't use QTextStream to read vcards

Just read the binary data to avoid time consuming text processing
during the read in the case of oversized vcard images.

Change-Id: I009332a99b7057549da57fd7c432d6731ab752b8
---
 src/authority/storagehelper.cpp | 15 ++++-----------
 1 file changed, 4 insertions(+), 11 deletions(-)

diff --git a/src/authority/storagehelper.cpp b/src/authority/storagehelper.cpp
index aa6e78a5..dfd15af4 100644
--- a/src/authority/storagehelper.cpp
+++ b/src/authority/storagehelper.cpp
@@ -298,8 +298,7 @@ setProfile(const QString& accountId, const api::profile::Info& profileInfo, cons
         qWarning().noquote() << "Can't open file for writing: " << file.fileName();
         return;
     }
-    QTextStream in(&file);
-    in << vcard;
+    QTextStream(&file) << vcard;
     file.close();
     lf.unlock();
 }
@@ -361,8 +360,7 @@ getAccountAvatar(const QString& accountId)
         qWarning() << "Can't open file: " << filePath;
         return {};
     }
-    QTextStream in(&file);
-    const auto vCard = lrc::vCard::utils::toHashMap(in.readAll().toUtf8());
+    const auto vCard = lrc::vCard::utils::toHashMap(file.readAll());
     const auto photo = (vCard.find(vCard::Property::PHOTO_PNG) == vCard.end())
                            ? vCard[vCard::Property::PHOTO_JPEG]
                            : vCard[vCard::Property::PHOTO_PNG];
@@ -398,9 +396,7 @@ buildContactFromProfile(const QString& accountId,
             return {profileInfo, "", true, false};
         }
     }
-    QTextStream in(&file);
-    QByteArray vcard = in.readAll().toUtf8();
-    const auto vCard = lrc::vCard::utils::toHashMap(vcard);
+    const auto vCard = lrc::vCard::utils::toHashMap(file.readAll());
     const auto alias = vCard[vCard::Property::FORMATTED_NAME];
     if (lrc::api::Lrc::cacheAvatars.load()) {
         for (const auto& key : vCard.keys()) {
@@ -424,9 +420,7 @@ avatar(const QString& accountId, const QString& contactId)
     if (!file.open(QIODevice::ReadOnly)) {
         return {};
     }
-    QTextStream in(&file);
-    QByteArray vcard = in.readAll().toUtf8();
-    const auto vCard = lrc::vCard::utils::toHashMap(vcard);
+    const auto vCard = lrc::vCard::utils::toHashMap(file.readAll());
     for (const auto& key : vCard.keys()) {
         if (key.contains("PHOTO"))
             return vCard[key];
@@ -434,7 +428,6 @@ avatar(const QString& accountId, const QString& contactId)
     return {};
 }
 
-
 VectorString
 getAllConversations(Database& db)
 {
-- 
GitLab