@@ -40,7 +40,11 @@ std::string extract_proc_args(sinsp_threadinfo* tinfo) {
40
40
if (tinfo->m_args .empty ()) return " " ;
41
41
std::ostringstream args;
42
42
for (auto it = tinfo->m_args .begin (); it != tinfo->m_args .end ();) {
43
- args << *it++;
43
+ auto arg = *it++;
44
+ auto arg_sanitized = SanitizedUTF8 (arg);
45
+
46
+ args << ((arg_sanitized ? *arg_sanitized : arg));
47
+
44
48
if (it != tinfo->m_args .end ()) args << " " ;
45
49
}
46
50
return args.str ();
@@ -106,22 +110,37 @@ ProcessSignal* ProcessSignalFormatter::CreateProcessSignal(sinsp_evt* event) {
106
110
const std::string* name = event_extractor_->get_comm (event);
107
111
const std::string* exepath = event_extractor_->get_exepath (event);
108
112
113
+ std::optional<std::string> name_sanitized;
114
+ std::optional<std::string> exepath_sanitized;
115
+
116
+ if (name) {
117
+ name_sanitized = SanitizedUTF8 (*name);
118
+ }
119
+
120
+ if (exepath) {
121
+ exepath_sanitized = SanitizedUTF8 (*exepath);
122
+ }
123
+
109
124
// set name (if name is missing or empty, try to use exec_file_path)
110
125
if (name && !name->empty () && *name != " <NA>" ) {
111
- signal->set_name (*name);
126
+ signal->set_name (name_sanitized ? *name_sanitized : *name);
112
127
} else if (exepath && !exepath->empty () && *exepath != " <NA>" ) {
113
- signal->set_name (*exepath);
128
+ signal->set_name (exepath_sanitized ? *exepath_sanitized : *exepath);
114
129
}
115
130
116
131
// set exec_file_path (if exec_file_path is missing or empty, try to use name)
117
132
if (exepath && !exepath->empty () && *exepath != " <NA>" ) {
118
- signal->set_exec_file_path (*exepath);
133
+ signal->set_exec_file_path (exepath_sanitized ? *exepath_sanitized : *exepath);
119
134
} else if (name && !name->empty () && *name != " <NA>" ) {
120
- signal->set_exec_file_path (*name);
135
+ signal->set_exec_file_path (name_sanitized ? *name_sanitized : *name);
121
136
}
122
137
123
138
// set process arguments
124
- if (const char * args = event_extractor_->get_proc_args (event)) signal->set_args (args);
139
+ if (const char * args = event_extractor_->get_proc_args (event)) {
140
+ std::string args_str = args;
141
+ auto args_sanitized = SanitizedUTF8 (args_str);
142
+ signal->set_args (args_sanitized ? *args_sanitized : args_str);
143
+ }
125
144
126
145
// set pid
127
146
if (const int64_t * pid = event_extractor_->get_pid (event)) signal->set_pid (*pid);
@@ -164,20 +183,22 @@ ProcessSignal* ProcessSignalFormatter::CreateProcessSignal(sinsp_threadinfo* tin
164
183
signal->set_id (UUIDStr ());
165
184
166
185
const auto & name = tinfo->m_comm ;
186
+ auto name_sanitized = SanitizedUTF8 (name);
167
187
const auto & exepath = tinfo->m_exepath ;
188
+ auto exepath_sanitized = SanitizedUTF8 (exepath);
168
189
169
190
// set name (if name is missing or empty, try to use exec_file_path)
170
191
if (!name.empty () && name != " <NA>" ) {
171
- signal->set_name (name);
192
+ signal->set_name (name_sanitized ? *name_sanitized : name);
172
193
} else if (!exepath.empty () && exepath != " <NA>" ) {
173
- signal->set_name (exepath);
194
+ signal->set_name (exepath_sanitized ? *exepath_sanitized : exepath);
174
195
}
175
196
176
197
// set exec_file_path (if exec_file_path is missing or empty, try to use name)
177
198
if (!exepath.empty () && exepath != " <NA>" ) {
178
- signal->set_exec_file_path (exepath);
199
+ signal->set_exec_file_path (exepath_sanitized ? *exepath_sanitized : exepath);
179
200
} else if (!name.empty () && name != " <NA>" ) {
180
- signal->set_exec_file_path (name);
201
+ signal->set_exec_file_path (name_sanitized ? *name_sanitized : name);
181
202
}
182
203
183
204
// set the process as coming from a scrape as opposed to an exec
0 commit comments