summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPádraig Brady <P@draigBrady.com>2015-11-04 02:44:41 +0000
committerPádraig Brady <P@draigBrady.com>2015-11-04 23:30:15 +0000
commitd820706d44f25de3f58ad41a7032997089d15385 (patch)
treea24ee009865dde67f48024fa05c521a903986c4e
parentc3763e5219979a714d380304b4847c9b1671241a (diff)
downloadcoreutils-d820706d44f25de3f58ad41a7032997089d15385.tar.xz
maint: add a syntax check to avoid unstyled quoting
* src/paste.c (main): Use our styled wrapper for quotearg_colon(). * cfg.mk (sc_prohibit-quotearg): A new syntax check to avoid future uses of unstyled quotearg to one of the internal slots, and thus destined for diagnostic output.
-rw-r--r--cfg.mk11
-rw-r--r--src/paste.c3
2 files changed, 12 insertions, 2 deletions
diff --git a/cfg.mk b/cfg.mk
index 78f19fa56..d6c4c9f61 100644
--- a/cfg.mk
+++ b/cfg.mk
@@ -218,6 +218,17 @@ sc_error_shell_always_quotes:
exit 1; } \
|| :
+# Avoid unstyled quoting to internal slots and thus destined for diagnostics
+# as that can leak unescaped control characters to the output, when using
+# the default "literal" quoting style.
+# Instead use quotef(), or quoteaf() or in edge cases quotearg_n_style_colon().
+# A more general PCRE would be @prohibit='quotearg_.*(?!(style|buffer))'
+sc_prohibit-quotearg:
+ @prohibit='quotearg(_n)?(|_colon|_char|_mem) ' \
+ in_vc_files='\.c$$' \
+ halt='Unstyled diagnostic quoting detected' \
+ $(_sc_search_regexp)
+
sc_sun_os_names:
@grep -nEi \
'solaris[^[:alnum:]]*2\.(7|8|9|[1-9][0-9])|sunos[^[:alnum:]][6-9]' \
diff --git a/src/paste.c b/src/paste.c
index 761ae8d94..7021a9628 100644
--- a/src/paste.c
+++ b/src/paste.c
@@ -502,10 +502,9 @@ main (int argc, char **argv)
{
/* Don't use the quote() quoting style, because that would double the
number of displayed backslashes, making the diagnostic look bogus. */
- set_quoting_style (NULL, c_maybe_quoting_style);
error (EXIT_FAILURE, 0,
_("delimiter list ends with an unescaped backslash: %s"),
- quotearg_colon (delim_arg));
+ quotearg_n_style_colon (0, c_maybe_quoting_style, delim_arg));
}
if (!serial_merge)