From 2bdd361948c1dee3f9b74ee6d439fdd9dba1b32e Mon Sep 17 00:00:00 2001 From: Maxime Coste Date: Sat, 17 Dec 2016 05:48:42 +0000 Subject: [PATCH] Escape the backslash chars as well when joining strings Fixes #1014 --- src/string.hh | 3 ++- test/regression/1014-ambiguous-kak_selections/cmd | 1 + test/regression/1014-ambiguous-kak_selections/in | 3 +++ test/regression/1014-ambiguous-kak_selections/selections | 1 + 4 files changed, 7 insertions(+), 1 deletion(-) create mode 100644 test/regression/1014-ambiguous-kak_selections/cmd create mode 100644 test/regression/1014-ambiguous-kak_selections/in create mode 100644 test/regression/1014-ambiguous-kak_selections/selections diff --git a/src/string.hh b/src/string.hh index 6fd2f5fb..00a20adc 100644 --- a/src/string.hh +++ b/src/string.hh @@ -330,12 +330,13 @@ String replace(StringView str, StringView substr, StringView replacement); template String join(const Container& container, char joiner, bool esc_joiner = true) { + const char to_escape[] = { joiner, '\\' }; String res; for (const auto& str : container) { if (not res.empty()) res += joiner; - res += esc_joiner ? escape(str, joiner, '\\') : str; + res += esc_joiner ? escape(str, to_escape, '\\') : str; } return res; } diff --git a/test/regression/1014-ambiguous-kak_selections/cmd b/test/regression/1014-ambiguous-kak_selections/cmd new file mode 100644 index 00000000..2783a13e --- /dev/null +++ b/test/regression/1014-ambiguous-kak_selections/cmd @@ -0,0 +1 @@ +%H diff --git a/test/regression/1014-ambiguous-kak_selections/in b/test/regression/1014-ambiguous-kak_selections/in new file mode 100644 index 00000000..819467ab --- /dev/null +++ b/test/regression/1014-ambiguous-kak_selections/in @@ -0,0 +1,3 @@ +foo\:bar +foo\\ +bar diff --git a/test/regression/1014-ambiguous-kak_selections/selections b/test/regression/1014-ambiguous-kak_selections/selections new file mode 100644 index 00000000..16016faf --- /dev/null +++ b/test/regression/1014-ambiguous-kak_selections/selections @@ -0,0 +1 @@ +foo\\\:bar:foo\\\\:bar