From 282a94d30180f6839b2f874e3716afdd3a09b3ae Mon Sep 17 00:00:00 2001 From: Simon McVittie <smcv@collabora.com> Date: Tue, 23 Mar 2021 15:16:55 +0000 Subject: [PATCH] system-info: Cope with non-UTF-8 library paths JSON strings must be valid Unicode, so use the lossy transformation in g_utf8_make_valid() to replace non-UTF-8 (if found) with U+FFFD REPLACEMENT CHARACTER. Signed-off-by: Simon McVittie <smcv@collabora.com> --- bin/system-info.c | 8 +++----- steam-runtime-tools/json-utils-internal.h | 4 ++++ steam-runtime-tools/json-utils.c | 15 +++++++++++++++ 3 files changed, 22 insertions(+), 5 deletions(-) diff --git a/bin/system-info.c b/bin/system-info.c index 11e49cf45..88e769928 100644 --- a/bin/system-info.c +++ b/bin/system-info.c @@ -287,11 +287,9 @@ print_libraries_details (JsonBuilder *builder, if (messages != NULL) _srt_json_builder_add_array_of_lines (builder, "messages", messages); - json_builder_set_member_name (builder, "soname"); - json_builder_add_string_value (builder, soname); - - json_builder_set_member_name (builder, "path"); - json_builder_add_string_value (builder, srt_library_get_absolute_path (l->data)); + _srt_json_builder_add_string_force_utf8 (builder, "soname", soname); + _srt_json_builder_add_string_force_utf8 (builder, "path", + srt_library_get_absolute_path (l->data)); if (srt_library_get_issues (l->data) != SRT_LIBRARY_ISSUES_NONE) { diff --git a/steam-runtime-tools/json-utils-internal.h b/steam-runtime-tools/json-utils-internal.h index 32dced706..fcc5f58b6 100644 --- a/steam-runtime-tools/json-utils-internal.h +++ b/steam-runtime-tools/json-utils-internal.h @@ -57,3 +57,7 @@ void _srt_json_builder_add_strv_value (JsonBuilder *builder, void _srt_json_builder_add_error_members (JsonBuilder *builder, const GError *error); + +void _srt_json_builder_add_string_force_utf8 (JsonBuilder *builder, + const char *key, + const char *value); diff --git a/steam-runtime-tools/json-utils.c b/steam-runtime-tools/json-utils.c index 09d7d6727..c9bdafe7f 100644 --- a/steam-runtime-tools/json-utils.c +++ b/steam-runtime-tools/json-utils.c @@ -322,3 +322,18 @@ _srt_json_builder_add_error_members (JsonBuilder *builder, json_builder_set_member_name (builder, "error"); json_builder_add_string_value (builder, error->message); } + +void +_srt_json_builder_add_string_force_utf8 (JsonBuilder *builder, + const char *key, + const char *value) +{ + g_autofree gchar *valid = NULL; + + json_builder_set_member_name (builder, key); + + if (value != NULL) + valid = g_utf8_make_valid (value, -1); + + json_builder_add_string_value (builder, valid); +} -- GitLab