summarylogtreecommitdiffstats
path: root/0002-patterns-Limit-number-of-characters-displayed-in-a-s.patch
blob: bf04ee774123f32d268f1e2fca936f938dd7341f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
From 6a1d0988d3c3bc9f135915542c37f953c0c262eb Mon Sep 17 00:00:00 2001
From: WerWolv <werwolv98@gmail.com>
Date: Mon, 11 Oct 2021 20:59:14 +0200
Subject: [PATCH 2/3] patterns: Limit number of characters displayed in a
 string pattern

---
 .../hex/pattern_language/pattern_data.hpp        | 16 ++++++++++------
 1 file changed, 10 insertions(+), 6 deletions(-)

diff --git a/plugins/libimhex/include/hex/pattern_language/pattern_data.hpp b/plugins/libimhex/include/hex/pattern_language/pattern_data.hpp
index fdcc8b0..24cac33 100644
--- a/plugins/libimhex/include/hex/pattern_language/pattern_data.hpp
+++ b/plugins/libimhex/include/hex/pattern_language/pattern_data.hpp
@@ -598,10 +598,12 @@ namespace hex::pl {
         }
 
         void createEntry(prv::Provider* &provider) override {
-            std::string buffer(this->getSize(), 0x00);
-            provider->read(this->getOffset(), buffer.data(), this->getSize());
+            auto size = std::min<size_t>(this->getSize(), 0x7F);
+            std::string buffer(size, 0x00);
 
-            this->createDefaultEntry(hex::format("\"{0}\"", makeDisplayable(buffer.data(), this->getSize()).c_str()), buffer);
+            provider->read(this->getOffset(), buffer.data(), size);
+
+            this->createDefaultEntry(hex::format("\"{0}\" {1}", makeDisplayable(buffer.data(), this->getSize()), size > this->getSize() ? "(truncated)" : ""), buffer);
         }
 
         [[nodiscard]] std::string getFormattedName() const override {
@@ -621,15 +623,17 @@ namespace hex::pl {
         }
 
         void createEntry(prv::Provider* &provider) override {
-            std::u16string buffer(this->getSize(), 0x00);
-            provider->read(this->getOffset(), buffer.data(), this->getSize());
+            auto size = std::min<size_t>(this->getSize(), 0x100);
+
+            std::u16string buffer(size, 0x00);
+            provider->read(this->getOffset(), buffer.data(), size);
 
             for (auto &c : buffer)
                 c = hex::changeEndianess(c, 2, this->getEndian());
 
             auto utf8String = std::wstring_convert<std::codecvt_utf8_utf16<char16_t>, char16_t>{}.to_bytes(buffer);
 
-            this->createDefaultEntry(hex::format("\"{0}\"", utf8String), utf8String);
+            this->createDefaultEntry(hex::format("\"{0}\" {1}", utf8String, size > this->getSize() ? "(truncated)" : ""), utf8String);
         }
 
         [[nodiscard]] std::string getFormattedName() const override {
-- 
2.33.1