summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog3
-rw-r--r--Src/builtin.c4
-rw-r--r--Src/zsh.h6
3 files changed, 9 insertions, 4 deletions
diff --git a/ChangeLog b/ChangeLog
index 1ae2b45c6..cf744ba67 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
2007-01-04 Peter Stephenson <pws@csr.com>
+ * 23088: Src/builtin.c, Src/zsh.h: Stephane says printf
+ formats and arguments should actually be escaped differently.
+
* 20386: Src/zsh.h, Test/B03print.ztst: printf should handle
octal escapes in the '\0NNN' form.
diff --git a/Src/builtin.c b/Src/builtin.c
index d756b28bb..8e579d24e 100644
--- a/Src/builtin.c
+++ b/Src/builtin.c
@@ -3490,7 +3490,7 @@ bin_print(char *name, char **args, Options ops, int func)
fmt = OPT_ARG(ops,'f');
if (fmt)
fmt = getkeystring(fmt, &flen, OPT_ISSET(ops,'b') ? GETKEYS_BINDKEY :
- GETKEYS_PRINTF, &fmttrunc);
+ GETKEYS_PRINTF_FMT, &fmttrunc);
first = args;
@@ -3954,7 +3954,7 @@ bin_print(char *name, char **args, Options ops, int func)
b = getkeystring(metafy(curarg, curlen, META_USEHEAP),
&l,
OPT_ISSET(ops,'b') ? GETKEYS_BINDKEY :
- GETKEYS_PRINTF, &nnl);
+ GETKEYS_PRINTF_ARG, &nnl);
} else {
b = curarg;
l = curlen;
diff --git a/Src/zsh.h b/Src/zsh.h
index 48f50e6a1..752587c57 100644
--- a/Src/zsh.h
+++ b/Src/zsh.h
@@ -1990,8 +1990,10 @@ enum {
*/
/* echo builtin */
#define GETKEYS_ECHO (GETKEY_BACKSLASH_C)
-/* printf format string */
-#define GETKEYS_PRINTF (GETKEY_BACKSLASH_C)
+/* printf format string: \123 -> S, \0123 -> NL 3 */
+#define GETKEYS_PRINTF_FMT (GETKEY_OCTAL_ESC|GETKEY_BACKSLASH_C)
+/* printf argument: \123 -> \123, \0123 -> S */
+#define GETKEYS_PRINTF_ARG (GETKEY_BACKSLASH_C)
/* Full print without -e */
#define GETKEYS_PRINT (GETKEY_OCTAL_ESC|GETKEY_BACKSLASH_C|GETKEY_EMACS)
/* bindkey */