about summary refs log tree commit diff
diff options
context:
space:
mode:
authorPeter Stephenson <pws@zsh.org>2017-05-09 09:46:23 +0100
committerPeter Stephenson <pws@zsh.org>2017-05-09 09:46:23 +0100
commit263a0c247620f86532424727f7ed07ca7540fbf3 (patch)
treedd7070ffc7cc07c48760c291af46c8d2f2d3af6c
parent51eff6168e40d760bdb715bc6fc5420d26449c4c (diff)
downloadzsh-263a0c247620f86532424727f7ed07ca7540fbf3.tar.gz
zsh-263a0c247620f86532424727f7ed07ca7540fbf3.tar.xz
zsh-263a0c247620f86532424727f7ed07ca7540fbf3.zip
41078: Empty psvar could cause bad dereference in prompt expansion
-rw-r--r--ChangeLog5
-rw-r--r--Src/prompt.c2
-rw-r--r--Test/D01prompt.ztst4
3 files changed, 10 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index 00e335f6c..82d4a7086 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2017-05-09  Peter Stephenson  <p.stephenson@samsung.com>
+
+	* 41078: Src/prompt.c, Test/D01prompt.ztst: Empty psvar could
+	cause bad reference in prompt expansion.
+
 2017-05-08  Peter Stephenson  <p.stephenson@samsung.com>
 
 	* 41059: Completion/compinit: use 2>&- to avoid error in
diff --git a/Src/prompt.c b/Src/prompt.c
index 29e006e0e..c478e69fb 100644
--- a/Src/prompt.c
+++ b/Src/prompt.c
@@ -399,7 +399,7 @@ putpromptchar(int doprint, int endchar, unsigned int *txtchangep)
 			test = 1;
 		    break;
 		case 'V':
-		    if (arrlen_ge(psvar, arg)) {
+		    if (psvar && *psvar && arrlen_ge(psvar, arg)) {
 			if (*psvar[(arg ? arg : 1) - 1])
 			    test = 1;
 		    }
diff --git a/Test/D01prompt.ztst b/Test/D01prompt.ztst
index 08187287d..11f18dc71 100644
--- a/Test/D01prompt.ztst
+++ b/Test/D01prompt.ztst
@@ -209,3 +209,7 @@
  print -P -f '%%Sfoo%%s\n' bar
 0:print -P -f
 >%Sfoo%s
+
+  print ${(%U)Y-%(v}
+0:Regression test for test on empty psvar
+>