diff options
-rw-r--r-- | src/libnm-glib-aux/nm-shared-utils.c | 21 | ||||
-rw-r--r-- | src/libnm-glib-aux/nm-shared-utils.h | 8 |
2 files changed, 19 insertions, 10 deletions
diff --git a/src/libnm-glib-aux/nm-shared-utils.c b/src/libnm-glib-aux/nm-shared-utils.c index 4a822d12cd..a51ff765d7 100644 --- a/src/libnm-glib-aux/nm-shared-utils.c +++ b/src/libnm-glib-aux/nm-shared-utils.c @@ -2757,13 +2757,16 @@ nm_utils_buf_utf8safe_escape(gconstpointer buf, if (g_utf8_validate(str, buflen, &p) && nul_terminated) { /* note that g_utf8_validate() does not allow NUL character inside @str. Good. * We can treat @str like a NUL terminated string. */ - if (!NM_STRCHAR_ANY(str, - ch, - (ch == '\\' - || (NM_FLAGS_HAS(flags, NM_UTILS_STR_UTF8_SAFE_FLAG_ESCAPE_CTRL) - && nm_ascii_is_ctrl_or_del(ch)) - || (NM_FLAGS_HAS(flags, NM_UTILS_STR_UTF8_SAFE_FLAG_ESCAPE_NON_ASCII) - && nm_ascii_is_non_ascii(ch))))) + if (!NM_STRCHAR_ANY( + str, + ch, + (ch == '\\' + || (NM_FLAGS_HAS(flags, NM_UTILS_STR_UTF8_SAFE_FLAG_ESCAPE_CTRL) + && nm_ascii_is_ctrl_or_del(ch)) + || (NM_FLAGS_HAS(flags, NM_UTILS_STR_UTF8_SAFE_FLAG_ESCAPE_NON_ASCII) + && nm_ascii_is_non_ascii(ch)) + || (NM_FLAGS_HAS(flags, NM_UTILS_STR_UTF8_SAFE_FLAG_ESCAPE_DOUBLE_QUOTE) + && ch == '"')))) return str; } @@ -2783,7 +2786,9 @@ nm_utils_buf_utf8safe_escape(gconstpointer buf, else if ((NM_FLAGS_HAS(flags, NM_UTILS_STR_UTF8_SAFE_FLAG_ESCAPE_CTRL) && nm_ascii_is_ctrl_or_del(ch)) || (NM_FLAGS_HAS(flags, NM_UTILS_STR_UTF8_SAFE_FLAG_ESCAPE_NON_ASCII) - && nm_ascii_is_non_ascii(ch))) + && nm_ascii_is_non_ascii(ch)) + || (NM_FLAGS_HAS(flags, NM_UTILS_STR_UTF8_SAFE_FLAG_ESCAPE_DOUBLE_QUOTE) + && ch == '"')) _str_buf_append_c_escape_octal(&strbuf, ch); else nm_str_buf_append_c(&strbuf, ch); diff --git a/src/libnm-glib-aux/nm-shared-utils.h b/src/libnm-glib-aux/nm-shared-utils.h index 7233d77d40..60735d3c8d 100644 --- a/src/libnm-glib-aux/nm-shared-utils.h +++ b/src/libnm-glib-aux/nm-shared-utils.h @@ -1252,12 +1252,16 @@ typedef enum { * It will backslash escape ascii characters according to nm_ascii_is_non_ascii(). */ NM_UTILS_STR_UTF8_SAFE_FLAG_ESCAPE_NON_ASCII = 0x0002, + /* Escape '"' as ASCII "\\042". This is useful when escaping a string so that + * it can be unescaped with `echo -e $PASTE_TEXT`. */ + NM_UTILS_STR_UTF8_SAFE_FLAG_ESCAPE_DOUBLE_QUOTE = 0x0004, + /* This flag only has an effect during escaping to ensure we * don't leak secrets in memory. Note that during unescape we * know the maximum result size from the beginning, and no * reallocation happens. Thus, unescape always avoids leaking * secrets already. */ - NM_UTILS_STR_UTF8_SAFE_FLAG_SECRET = 0x0004, + NM_UTILS_STR_UTF8_SAFE_FLAG_SECRET = 0x0008, /* This flag only has an effect during unescaping. It means * that non-escaped whitespaces (g_ascii_isspace()) will be @@ -1265,7 +1269,7 @@ typedef enum { * this flag is only useful for gracefully accepting user input * with spaces. With this flag, escape and unescape may no longer * yield the original input. */ - NM_UTILS_STR_UTF8_SAFE_UNESCAPE_STRIP_SPACES = 0x0008, + NM_UTILS_STR_UTF8_SAFE_UNESCAPE_STRIP_SPACES = 0x0010, } NMUtilsStrUtf8SafeFlags; const char *nm_utils_buf_utf8safe_escape(gconstpointer buf, |