summaryrefslogtreecommitdiff
path: root/meta-openbmc-mods/meta-common/recipes-extended/sdbusplus/sdbusplus/0002-Skip-decoding-some-dbus-identifiers.patch
blob: 3f65cd16f567f3cb32adaaf3d4d73604509abcbd (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
55
56
57
58
59
60
61
62
63
64
65
66
From 2765f7fe7e01f3bbf30b008d0aea5c4260c2bbb9 Mon Sep 17 00:00:00 2001
From: Nidhin MS <nidhin.ms@intel.com>
Date: Tue, 22 Jun 2021 19:49:28 +0530
Subject: [PATCH] Skip decoding some dbus identifiers

Dbus identifiers starting with _ and having length less than 3 and also
those having incorrect encoding can be skipped from decoding in
filename() method. Services like user manager accepts usernames
starting with _ and does not restrict accepted usernames.
Ignore those dbus identifiers while decoding.

Tested:
Small identifiers decoded correctly

Change-Id: I11aea22060a789dcf756142ee02637dfe7d77c14
Signed-off-by: Nidhin MS <nidhin.ms@intel.com>
---
 src/message/native_types.cpp | 7 +++++--
 test/message/types.cpp       | 8 ++++----
 2 files changed, 9 insertions(+), 6 deletions(-)

diff --git a/src/message/native_types.cpp b/src/message/native_types.cpp
index f0a7747..118d829 100644
--- a/src/message/native_types.cpp
+++ b/src/message/native_types.cpp
@@ -79,13 +79,16 @@ std::string string_path_wrapper::filename() const
         }
         if (i + 2 >= filename.size())
         {
-            return "";
+            out.append(1, filename[i]);
+            continue;
         }
+
         auto ch = unhex[filename[i + 1]];
         auto cl = unhex[filename[i + 2]];
         if (ch == -1 || cl == -1)
         {
-            return "";
+            out.append(1, filename[i]);
+            continue;
         }
         out.append(1, (ch << 4) | cl);
         i += 2;
diff --git a/test/message/types.cpp b/test/message/types.cpp
index d666008..2c639f5 100644
--- a/test/message/types.cpp
+++ b/test/message/types.cpp
@@ -53,10 +53,10 @@ TEST(MessageTypes, ObjectPathFilename)
     EXPECT_EQ(sdbusplus::message::object_path("/_2d").filename(), "-");
     EXPECT_EQ(sdbusplus::message::object_path("/_20").filename(), " ");
     EXPECT_EQ(sdbusplus::message::object_path("/_2F").filename(), "/");
-    EXPECT_EQ(sdbusplus::message::object_path("/_").filename(), "");
-    EXPECT_EQ(sdbusplus::message::object_path("/_2").filename(), "");
-    EXPECT_EQ(sdbusplus::message::object_path("/_2y").filename(), "");
-    EXPECT_EQ(sdbusplus::message::object_path("/_y2").filename(), "");
+    EXPECT_EQ(sdbusplus::message::object_path("/_").filename(), "_");
+    EXPECT_EQ(sdbusplus::message::object_path("/_2").filename(), "_2");
+    EXPECT_EQ(sdbusplus::message::object_path("/_2y").filename(), "_2y");
+    EXPECT_EQ(sdbusplus::message::object_path("/_y2").filename(), "_y2");
     EXPECT_EQ(sdbusplus::message::object_path("/bios_active").filename(),
               "bios_active");
 }
-- 
2.17.1