Zbigniew Jędrzejewski-Szmek 96237b
From 799f37dd06946958dfed2aec54788c5e81bf340a Mon Sep 17 00:00:00 2001
Zbigniew Jędrzejewski-Szmek 96237b
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
Zbigniew Jędrzejewski-Szmek 96237b
Date: Tue, 4 Mar 2014 09:50:26 -0500
Zbigniew Jędrzejewski-Szmek 96237b
Subject: [PATCH] Do not print invalid UTF-8 in error messages
Zbigniew Jędrzejewski-Szmek 96237b
Zbigniew Jędrzejewski-Szmek 96237b
Inexplicably, 550a40ec ('core: do not print invalid utf-8 in error
Zbigniew Jędrzejewski-Szmek 96237b
messages') only fixed two paths. Convert all of them now.
Zbigniew Jędrzejewski-Szmek 96237b
Zbigniew Jędrzejewski-Szmek 96237b
(cherry picked from commit b5d742138f71e87312541a89aac5657015f50f48)
Zbigniew Jędrzejewski-Szmek 96237b
Zbigniew Jędrzejewski-Szmek 96237b
Conflicts:
Zbigniew Jędrzejewski-Szmek 96237b
	src/core/load-fragment.c
Zbigniew Jędrzejewski-Szmek 96237b
	src/shared/conf-parser.c
Zbigniew Jędrzejewski-Szmek 96237b
---
Zbigniew Jędrzejewski-Szmek 96237b
 src/core/load-fragment.c | 11 +++--------
Zbigniew Jędrzejewski-Szmek 96237b
 src/shared/conf-parser.c |  6 ++----
Zbigniew Jędrzejewski-Szmek 96237b
 src/shared/conf-parser.h |  6 ++++++
Zbigniew Jędrzejewski-Szmek 96237b
 src/shared/fileio.c      |  9 ++++++---
Zbigniew Jędrzejewski-Szmek 96237b
 4 files changed, 17 insertions(+), 15 deletions(-)
Zbigniew Jędrzejewski-Szmek 96237b
Zbigniew Jędrzejewski-Szmek 96237b
diff --git a/src/core/load-fragment.c b/src/core/load-fragment.c
Zbigniew Jędrzejewski-Szmek 96237b
index 82aed1e..027ec5f 100644
Zbigniew Jędrzejewski-Szmek 96237b
--- a/src/core/load-fragment.c
Zbigniew Jędrzejewski-Szmek 96237b
+++ b/src/core/load-fragment.c
Zbigniew Jędrzejewski-Szmek 96237b
@@ -535,9 +535,7 @@ int config_parse_exec(const char *unit,
Zbigniew Jędrzejewski-Szmek 96237b
                                 }
Zbigniew Jędrzejewski-Szmek 96237b
 
Zbigniew Jędrzejewski-Szmek 96237b
                                 if (!utf8_is_valid(path)) {
Zbigniew Jędrzejewski-Szmek 96237b
-                                        log_syntax(unit, LOG_ERR, filename, line, EINVAL,
Zbigniew Jędrzejewski-Szmek 96237b
-                                                   "Path is not UTF-8 clean, ignoring assignment: %s",
Zbigniew Jędrzejewski-Szmek 96237b
-                                                   rvalue);
Zbigniew Jędrzejewski-Szmek 96237b
+                                        log_invalid_utf8(unit, LOG_ERR, filename, line, EINVAL, rvalue);
Zbigniew Jędrzejewski-Szmek 96237b
                                         r = 0;
Zbigniew Jędrzejewski-Szmek 96237b
                                         goto fail;
Zbigniew Jędrzejewski-Szmek 96237b
                                 }
Zbigniew Jędrzejewski-Szmek 96237b
@@ -552,9 +550,7 @@ int config_parse_exec(const char *unit,
Zbigniew Jędrzejewski-Szmek 96237b
                                 }
Zbigniew Jędrzejewski-Szmek 96237b
 
Zbigniew Jędrzejewski-Szmek 96237b
                                 if (!utf8_is_valid(c)) {
Zbigniew Jędrzejewski-Szmek 96237b
-                                        log_syntax(unit, LOG_ERR, filename, line, EINVAL,
Zbigniew Jędrzejewski-Szmek 96237b
-                                                   "Path is not UTF-8 clean, ignoring assignment: %s",
Zbigniew Jędrzejewski-Szmek 96237b
-                                                   rvalue);
Zbigniew Jędrzejewski-Szmek 96237b
+                                        log_invalid_utf8(unit, LOG_ERR, filename, line, EINVAL, rvalue);
Zbigniew Jędrzejewski-Szmek 96237b
                                         r = 0;
Zbigniew Jędrzejewski-Szmek 96237b
                                         goto fail;
Zbigniew Jędrzejewski-Szmek 96237b
                                 }
Zbigniew Jędrzejewski-Szmek 96237b
@@ -1959,8 +1955,7 @@ int config_parse_unit_requires_mounts_for(
Zbigniew Jędrzejewski-Szmek 96237b
                         return log_oom();
Zbigniew Jędrzejewski-Szmek 96237b
 
Zbigniew Jędrzejewski-Szmek 96237b
                 if (!utf8_is_valid(n)) {
Zbigniew Jędrzejewski-Szmek 96237b
-                        log_syntax(unit, LOG_ERR, filename, line, EINVAL,
Zbigniew Jędrzejewski-Szmek 96237b
-                                   "Path is not UTF-8 clean, ignoring assignment: %s", rvalue);
Zbigniew Jędrzejewski-Szmek 96237b
+                        log_invalid_utf8(unit, LOG_ERR, filename, line, EINVAL, rvalue);
Zbigniew Jędrzejewski-Szmek 96237b
                         continue;
Zbigniew Jędrzejewski-Szmek 96237b
                 }
Zbigniew Jędrzejewski-Szmek 96237b
 
Zbigniew Jędrzejewski-Szmek 96237b
diff --git a/src/shared/conf-parser.c b/src/shared/conf-parser.c
Zbigniew Jędrzejewski-Szmek 96237b
index cfa669b..b6aa856 100644
Zbigniew Jędrzejewski-Szmek 96237b
--- a/src/shared/conf-parser.c
Zbigniew Jędrzejewski-Szmek 96237b
+++ b/src/shared/conf-parser.c
Zbigniew Jędrzejewski-Szmek 96237b
@@ -656,8 +656,7 @@ int config_parse_path(const char *unit,
Zbigniew Jędrzejewski-Szmek 96237b
         assert(data);
Zbigniew Jędrzejewski-Szmek 96237b
 
Zbigniew Jędrzejewski-Szmek 96237b
         if (!utf8_is_valid(rvalue)) {
Zbigniew Jędrzejewski-Szmek 96237b
-                log_syntax(unit, LOG_ERR, filename, line, EINVAL,
Zbigniew Jędrzejewski-Szmek 96237b
-                           "Path is not UTF-8 clean, ignoring assignment: %s", rvalue);
Zbigniew Jędrzejewski-Szmek 96237b
+                log_invalid_utf8(unit, LOG_ERR, filename, line, EINVAL, rvalue);
Zbigniew Jędrzejewski-Szmek 96237b
                 return 0;
Zbigniew Jędrzejewski-Szmek 96237b
         }
Zbigniew Jędrzejewski-Szmek 96237b
 
Zbigniew Jędrzejewski-Szmek 96237b
@@ -725,8 +724,7 @@ int config_parse_strv(const char *unit,
Zbigniew Jędrzejewski-Szmek 96237b
                         return log_oom();
Zbigniew Jędrzejewski-Szmek 96237b
 
Zbigniew Jędrzejewski-Szmek 96237b
                 if (!utf8_is_valid(n)) {
Zbigniew Jędrzejewski-Szmek 96237b
-                        log_syntax(unit, LOG_ERR, filename, line, EINVAL,
Zbigniew Jędrzejewski-Szmek 96237b
-                                   "String is not UTF-8 clean, ignoring: %s", rvalue);
Zbigniew Jędrzejewski-Szmek 96237b
+                        log_invalid_utf8(unit, LOG_ERR, filename, line, EINVAL, rvalue);
Zbigniew Jędrzejewski-Szmek 96237b
                         continue;
Zbigniew Jędrzejewski-Szmek 96237b
                 }
Zbigniew Jędrzejewski-Szmek 96237b
 
Zbigniew Jędrzejewski-Szmek 96237b
diff --git a/src/shared/conf-parser.h b/src/shared/conf-parser.h
Zbigniew Jędrzejewski-Szmek 96237b
index 4ccdadd..7e1c493 100644
Zbigniew Jędrzejewski-Szmek 96237b
--- a/src/shared/conf-parser.h
Zbigniew Jędrzejewski-Szmek 96237b
+++ b/src/shared/conf-parser.h
Zbigniew Jędrzejewski-Szmek 96237b
@@ -124,6 +124,12 @@ int log_syntax_internal(const char *unit, int level,
Zbigniew Jędrzejewski-Szmek 96237b
                             config_file, config_line,                   \
Zbigniew Jędrzejewski-Szmek 96237b
                             error, __VA_ARGS__)
Zbigniew Jędrzejewski-Szmek 96237b
 
Zbigniew Jędrzejewski-Szmek 96237b
+#define log_invalid_utf8(unit, level, config_file, config_line, error, rvalue) { \
Zbigniew Jędrzejewski-Szmek 96237b
+        _cleanup_free_ char *__p = utf8_escape_invalid(rvalue);                  \
Zbigniew Jędrzejewski-Szmek 96237b
+        log_syntax(unit, level, config_file, config_line, error,                 \
Zbigniew Jędrzejewski-Szmek 96237b
+                   "String is not UTF-8 clean, ignoring assignment: %s", __p);   \
Zbigniew Jędrzejewski-Szmek 96237b
+        }
Zbigniew Jędrzejewski-Szmek 96237b
+
Zbigniew Jędrzejewski-Szmek 96237b
 #define DEFINE_CONFIG_PARSE_ENUM(function,name,type,msg)                \
Zbigniew Jędrzejewski-Szmek 96237b
         int function(const char *unit,                                  \
Zbigniew Jędrzejewski-Szmek 96237b
                      const char *filename,                              \
Zbigniew Jędrzejewski-Szmek 96237b
diff --git a/src/shared/fileio.c b/src/shared/fileio.c
Zbigniew Jędrzejewski-Szmek 96237b
index 0d3f2e9..fcd1b8a 100644
Zbigniew Jędrzejewski-Szmek 96237b
--- a/src/shared/fileio.c
Zbigniew Jędrzejewski-Szmek 96237b
+++ b/src/shared/fileio.c
Zbigniew Jędrzejewski-Szmek 96237b
@@ -598,15 +598,18 @@ static int load_env_file_push(const char *filename, unsigned line,
Zbigniew Jędrzejewski-Szmek 96237b
         int r;
Zbigniew Jędrzejewski-Szmek 96237b
 
Zbigniew Jędrzejewski-Szmek 96237b
         if (!utf8_is_valid(key)) {
Zbigniew Jędrzejewski-Szmek 96237b
+                _cleanup_free_ char *t = utf8_escape_invalid(key);
Zbigniew Jędrzejewski-Szmek 96237b
+
Zbigniew Jędrzejewski-Szmek 96237b
                 log_error("%s:%u: invalid UTF-8 for key '%s', ignoring.",
Zbigniew Jędrzejewski-Szmek 96237b
-                          filename, line, key);
Zbigniew Jędrzejewski-Szmek 96237b
+                          filename, line, t);
Zbigniew Jędrzejewski-Szmek 96237b
                 return -EINVAL;
Zbigniew Jędrzejewski-Szmek 96237b
         }
Zbigniew Jędrzejewski-Szmek 96237b
 
Zbigniew Jędrzejewski-Szmek 96237b
         if (value && !utf8_is_valid(value)) {
Zbigniew Jędrzejewski-Szmek 96237b
-                /* FIXME: filter UTF-8 */
Zbigniew Jędrzejewski-Szmek 96237b
+                _cleanup_free_ char *t = utf8_escape_invalid(value);
Zbigniew Jędrzejewski-Szmek 96237b
+
Zbigniew Jędrzejewski-Szmek 96237b
                 log_error("%s:%u: invalid UTF-8 value for key %s: '%s', ignoring.",
Zbigniew Jędrzejewski-Szmek 96237b
-                          filename, line, key, value);
Zbigniew Jędrzejewski-Szmek 96237b
+                          filename, line, key, t);
Zbigniew Jędrzejewski-Szmek 96237b
                 return -EINVAL;
Zbigniew Jędrzejewski-Szmek 96237b
         }
Zbigniew Jędrzejewski-Szmek 96237b