2014-03-07 10:33:04 +01:00
|
|
|
From b5d742138f71e87312541a89aac5657015f50f48 Mon Sep 17 00:00:00 2001
|
|
|
|
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
|
|
|
|
Date: Tue, 4 Mar 2014 09:50:26 -0500
|
|
|
|
Subject: [PATCH] Do not print invalid UTF-8 in error messages
|
|
|
|
|
|
|
|
Inexplicably, 550a40ec ('core: do not print invalid utf-8 in error
|
|
|
|
messages') only fixed two paths. Convert all of them now.
|
|
|
|
---
|
|
|
|
src/core/load-fragment.c | 13 ++++---------
|
|
|
|
src/shared/conf-parser.c | 7 +++----
|
|
|
|
src/shared/conf-parser.h | 6 ++++++
|
|
|
|
src/shared/fileio.c | 9 ++++++---
|
|
|
|
4 files changed, 19 insertions(+), 16 deletions(-)
|
|
|
|
|
|
|
|
diff --git src/core/load-fragment.c src/core/load-fragment.c
|
|
|
|
index d77bf5c..5628d8c 100644
|
|
|
|
--- src/core/load-fragment.c
|
|
|
|
+++ src/core/load-fragment.c
|
|
|
|
@@ -536,9 +536,7 @@ int config_parse_exec(const char *unit,
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!utf8_is_valid(path)) {
|
|
|
|
- log_syntax(unit, LOG_ERR, filename, line, EINVAL,
|
|
|
|
- "Path is not UTF-8 clean, ignoring assignment: %s",
|
|
|
|
- rvalue);
|
|
|
|
+ log_invalid_utf8(unit, LOG_ERR, filename, line, EINVAL, rvalue);
|
|
|
|
r = 0;
|
|
|
|
goto fail;
|
|
|
|
}
|
|
|
|
@@ -553,9 +551,7 @@ int config_parse_exec(const char *unit,
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!utf8_is_valid(c)) {
|
|
|
|
- log_syntax(unit, LOG_ERR, filename, line, EINVAL,
|
|
|
|
- "Path is not UTF-8 clean, ignoring assignment: %s",
|
|
|
|
- rvalue);
|
|
|
|
+ log_invalid_utf8(unit, LOG_ERR, filename, line, EINVAL, rvalue);
|
|
|
|
r = 0;
|
|
|
|
goto fail;
|
|
|
|
}
|
|
|
|
@@ -1960,8 +1956,7 @@ int config_parse_unit_requires_mounts_for(
|
|
|
|
return log_oom();
|
|
|
|
|
|
|
|
if (!utf8_is_valid(n)) {
|
|
|
|
- log_syntax(unit, LOG_ERR, filename, line, EINVAL,
|
|
|
|
- "Path is not UTF-8 clean, ignoring assignment: %s", rvalue);
|
|
|
|
+ log_invalid_utf8(unit, LOG_ERR, filename, line, EINVAL, rvalue);
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
|
|
|
|
diff --git src/shared/conf-parser.c src/shared/conf-parser.c
|
|
|
|
index 0a87a71..d27b1b7 100644
|
2014-03-07 13:54:16 +01:00
|
|
|
--- src/shared/conf-parser.c
|
|
|
|
+++ src/shared/conf-parser.c
|
2014-03-07 10:33:04 +01:00
|
|
|
@@ -618,8 +618,7 @@ int config_parse_string(const char *unit
|
|
|
|
return log_oom();
|
|
|
|
|
|
|
|
if (!utf8_is_valid(n)) {
|
|
|
|
- log_syntax(unit, LOG_ERR, filename, line, EINVAL,
|
|
|
|
- "String is not UTF-8 clean, ignoring assignment: %s", rvalue);
|
|
|
|
+ log_invalid_utf8(unit, LOG_ERR, filename, line, EINVAL, rvalue);
|
|
|
|
free(n);
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
@@ -656,8 +655,7 @@ int config_parse_path(const char *unit,
|
|
|
|
assert(data);
|
|
|
|
|
|
|
|
if (!utf8_is_valid(rvalue)) {
|
|
|
|
- log_syntax(unit, LOG_ERR, filename, line, EINVAL,
|
|
|
|
- "Path is not UTF-8 clean, ignoring assignment: %s", rvalue);
|
|
|
|
+ log_invalid_utf8(unit, LOG_ERR, filename, line, EINVAL, rvalue);
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
@@ -725,8 +723,7 @@ int config_parse_strv(const char *unit,
|
|
|
|
return log_oom();
|
|
|
|
|
|
|
|
if (!utf8_is_valid(n)) {
|
|
|
|
- log_syntax(unit, LOG_ERR, filename, line, EINVAL,
|
|
|
|
- "String is not UTF-8 clean, ignoring: %s", rvalue);
|
|
|
|
+ log_invalid_utf8(unit, LOG_ERR, filename, line, EINVAL, rvalue);
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
|
|
|
|
diff --git src/shared/conf-parser.h src/shared/conf-parser.h
|
|
|
|
index e1c7ab4..ba0e58d 100644
|
|
|
|
--- src/shared/conf-parser.h
|
|
|
|
+++ src/shared/conf-parser.h
|
|
|
|
@@ -121,6 +121,12 @@ int log_syntax_internal(const char *unit, int level,
|
|
|
|
config_file, config_line, \
|
|
|
|
error, __VA_ARGS__)
|
|
|
|
|
|
|
|
+#define log_invalid_utf8(unit, level, config_file, config_line, error, rvalue) { \
|
|
|
|
+ _cleanup_free_ char *__p = utf8_escape_invalid(rvalue); \
|
|
|
|
+ log_syntax(unit, level, config_file, config_line, error, \
|
|
|
|
+ "String is not UTF-8 clean, ignoring assignment: %s", __p); \
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
#define DEFINE_CONFIG_PARSE_ENUM(function,name,type,msg) \
|
|
|
|
int function(const char *unit, \
|
|
|
|
const char *filename, \
|
|
|
|
diff --git src/shared/fileio.c src/shared/fileio.c
|
|
|
|
index d591567..f101269 100644
|
|
|
|
--- src/shared/fileio.c
|
|
|
|
+++ src/shared/fileio.c
|
|
|
|
@@ -598,15 +598,18 @@ static int load_env_file_push(const char *filename, unsigned line,
|
|
|
|
int r;
|
|
|
|
|
|
|
|
if (!utf8_is_valid(key)) {
|
|
|
|
+ _cleanup_free_ char *t = utf8_escape_invalid(key);
|
|
|
|
+
|
|
|
|
log_error("%s:%u: invalid UTF-8 for key '%s', ignoring.",
|
|
|
|
- filename, line, key);
|
|
|
|
+ filename, line, t);
|
|
|
|
return -EINVAL;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (value && !utf8_is_valid(value)) {
|
|
|
|
- /* FIXME: filter UTF-8 */
|
|
|
|
+ _cleanup_free_ char *t = utf8_escape_invalid(value);
|
|
|
|
+
|
|
|
|
log_error("%s:%u: invalid UTF-8 value for key %s: '%s', ignoring.",
|
|
|
|
- filename, line, key, value);
|
|
|
|
+ filename, line, key, t);
|
|
|
|
return -EINVAL;
|
|
|
|
}
|
|
|
|
|
|
|
|
--
|
|
|
|
1.7.9.2
|
|
|
|
|