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
|