summary refs log tree commit diff
diff options
context:
space:
mode:
authorMartijn Dekker <martijn@inlv.org>2017-08-03 19:57:04 +0200
committerPeter Stephenson <p.w.stephenson@ntlworld.com>2017-08-03 21:32:20 +0100
commita51cd62b4567e5c18b4a2b7c98bb3087013afdc3 (patch)
tree13c7e82fcc1d2ed1dc41bdc4bf5a8206d53e1135
parent623be7199e09d977c22b2cbaa8ed19849f84ead0 (diff)
downloadzsh-a51cd62b4567e5c18b4a2b7c98bb3087013afdc3.tar.gz
zsh-a51cd62b4567e5c18b4a2b7c98bb3087013afdc3.tar.xz
zsh-a51cd62b4567e5c18b4a2b7c98bb3087013afdc3.zip
41484: Make ${(q+)...} quote backsleshes.
-rw-r--r--ChangeLog5
-rw-r--r--Src/utils.c6
2 files changed, 10 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index 01e3f6a22..0336c8787 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2017-08-03  Peter Stephenson  <p.w.stephenson@ntlworld.com>
+
+	* Martijn: 41484: Src/utils.c: ${(q+)...} didn't properly
+	quote backslashes.
+
 2017-08-02  Daniel Shahaf  <d.s@daniel.shahaf.name>
 
 	* 41479: Completion/Unix/Command/_xz: Complete compressed,
diff --git a/Src/utils.c b/Src/utils.c
index 1b80e8cb0..5055d69fe 100644
--- a/Src/utils.c
+++ b/Src/utils.c
@@ -5119,7 +5119,7 @@ niceztrlen(char const *s)
  * If flags contains NICEFLAG_HEAP, use the heap for *outstrp, else
  * zalloc.
  * If flags contsins NICEFLAG_QUOTE, the output is going to be within
- * $'...', so quote "'" with a backslash.
+ * $'...', so quote "'" and "\" with a backslash.
  */
 
 /**/
@@ -5175,6 +5175,10 @@ mb_niceformat(const char *s, FILE *stream, char **outstrp, int flags)
 		fmt = "\\'";
 		newl = 2;
 	    }
+	    else if (c == L'\\' && (flags & NICEFLAG_QUOTE)) {
+		fmt = "\\\\";
+		newl = 2;
+	    }
 	    else
 		fmt = wcs_nicechar_sel(c, &newl, NULL, flags & NICEFLAG_QUOTE);
 	    break;