summary refs log tree commit diff
diff options
context:
space:
mode:
authordana <dana@dana.is>2019-02-03 11:55:40 -0600
committerdana <dana@dana.is>2019-02-03 11:55:40 -0600
commited4c8f3d5e233e654f00cc52949b46b48191a332 (patch)
tree56b32afb0d125a85a737ab0431ee428d4175ff1c
parent4f6ac08af3ffd9ce13912a50cbeed6546a2440e6 (diff)
downloadzsh-ed4c8f3d5e233e654f00cc52949b46b48191a332.tar.gz
zsh-ed4c8f3d5e233e654f00cc52949b46b48191a332.tar.xz
zsh-ed4c8f3d5e233e654f00cc52949b46b48191a332.zip
44030: prompt: Return error for unrecognised colour name
-rw-r--r--ChangeLog5
-rw-r--r--Src/prompt.c2
-rw-r--r--Test/D01prompt.ztst8
3 files changed, 15 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index 0fa26a580..1d8537321 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2019-02-03  dana  <dana@dana.is>
+
+	* 44030: Src/prompt.c, Test/D01prompt.ztst: Return error for
+	unrecognised colour name
+
 2019-01-28  Fredric Silberberg  <fred@silberberg.xyz>
 
 	* github #32: Completion/Unix/Command/_git: Fix a typo in the
diff --git a/Src/prompt.c b/Src/prompt.c
index 4603ffba6..f2b3f161e 100644
--- a/Src/prompt.c
+++ b/Src/prompt.c
@@ -1663,6 +1663,8 @@ match_colour(const char **teststrp, int is_fg, int colour)
 		/* default */
 		return is_fg ? TXTNOFGCOLOUR : TXTNOBGCOLOUR;
 	    }
+	    if (colour < 0)
+		return TXT_ERROR;
 	}
 	else {
 	    colour = (int)zstrtol(*teststrp, (char **)teststrp, 10);
diff --git a/Test/D01prompt.ztst b/Test/D01prompt.ztst
index 56b7c294a..7ff478e68 100644
--- a/Test/D01prompt.ztst
+++ b/Test/D01prompt.ztst
@@ -221,3 +221,11 @@
   print ${(%U)Y-%(v}
 0:Regression test for test on empty psvar
 >
+
+# Unrecognised colour strings should produce the default sequence
+  f=${(%):-'%f'} # Recognised
+  Fdefault=${(%):-'%F{default}'} # Recognised
+  Freset=${(%):-'%F{reset}'} # Unrecognised
+  Ffoo=${(%):-'%F{foo}'} # Unrecognised
+  [[ $f == $Fdefault && $Fdefault == $Freset && $Freset == $Ffoo ]]
+0:Regression test for workers/44029