glib-aux: add NM_UTILS_STR_UTF8_SAFE_FLAG_ESCAPE_DOUBLE_QUOTE flag to escape double quotes
This is useful when printing a string for debugging. Then we can printf("v=\"%s\"", utf8safe_escaped_text), which can be safely unescaped with `echo -e`.
This commit is contained in:
@@ -2757,13 +2757,16 @@ nm_utils_buf_utf8safe_escape(gconstpointer buf,
|
|||||||
if (g_utf8_validate(str, buflen, &p) && nul_terminated) {
|
if (g_utf8_validate(str, buflen, &p) && nul_terminated) {
|
||||||
/* note that g_utf8_validate() does not allow NUL character inside @str. Good.
|
/* note that g_utf8_validate() does not allow NUL character inside @str. Good.
|
||||||
* We can treat @str like a NUL terminated string. */
|
* We can treat @str like a NUL terminated string. */
|
||||||
if (!NM_STRCHAR_ANY(str,
|
if (!NM_STRCHAR_ANY(
|
||||||
ch,
|
str,
|
||||||
(ch == '\\'
|
ch,
|
||||||
|| (NM_FLAGS_HAS(flags, NM_UTILS_STR_UTF8_SAFE_FLAG_ESCAPE_CTRL)
|
(ch == '\\'
|
||||||
&& nm_ascii_is_ctrl_or_del(ch))
|
|| (NM_FLAGS_HAS(flags, NM_UTILS_STR_UTF8_SAFE_FLAG_ESCAPE_CTRL)
|
||||||
|| (NM_FLAGS_HAS(flags, NM_UTILS_STR_UTF8_SAFE_FLAG_ESCAPE_NON_ASCII)
|
&& nm_ascii_is_ctrl_or_del(ch))
|
||||||
&& nm_ascii_is_non_ascii(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;
|
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)
|
else if ((NM_FLAGS_HAS(flags, NM_UTILS_STR_UTF8_SAFE_FLAG_ESCAPE_CTRL)
|
||||||
&& nm_ascii_is_ctrl_or_del(ch))
|
&& nm_ascii_is_ctrl_or_del(ch))
|
||||||
|| (NM_FLAGS_HAS(flags, NM_UTILS_STR_UTF8_SAFE_FLAG_ESCAPE_NON_ASCII)
|
|| (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);
|
_str_buf_append_c_escape_octal(&strbuf, ch);
|
||||||
else
|
else
|
||||||
nm_str_buf_append_c(&strbuf, ch);
|
nm_str_buf_append_c(&strbuf, ch);
|
||||||
|
@@ -1252,12 +1252,16 @@ typedef enum {
|
|||||||
* It will backslash escape ascii characters according to nm_ascii_is_non_ascii(). */
|
* It will backslash escape ascii characters according to nm_ascii_is_non_ascii(). */
|
||||||
NM_UTILS_STR_UTF8_SAFE_FLAG_ESCAPE_NON_ASCII = 0x0002,
|
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
|
/* This flag only has an effect during escaping to ensure we
|
||||||
* don't leak secrets in memory. Note that during unescape we
|
* don't leak secrets in memory. Note that during unescape we
|
||||||
* know the maximum result size from the beginning, and no
|
* know the maximum result size from the beginning, and no
|
||||||
* reallocation happens. Thus, unescape always avoids leaking
|
* reallocation happens. Thus, unescape always avoids leaking
|
||||||
* secrets already. */
|
* 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
|
/* This flag only has an effect during unescaping. It means
|
||||||
* that non-escaped whitespaces (g_ascii_isspace()) will be
|
* 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
|
* this flag is only useful for gracefully accepting user input
|
||||||
* with spaces. With this flag, escape and unescape may no longer
|
* with spaces. With this flag, escape and unescape may no longer
|
||||||
* yield the original input. */
|
* yield the original input. */
|
||||||
NM_UTILS_STR_UTF8_SAFE_UNESCAPE_STRIP_SPACES = 0x0008,
|
NM_UTILS_STR_UTF8_SAFE_UNESCAPE_STRIP_SPACES = 0x0010,
|
||||||
} NMUtilsStrUtf8SafeFlags;
|
} NMUtilsStrUtf8SafeFlags;
|
||||||
|
|
||||||
const char *nm_utils_buf_utf8safe_escape(gconstpointer buf,
|
const char *nm_utils_buf_utf8safe_escape(gconstpointer buf,
|
||||||
|
Reference in New Issue
Block a user