zsh-workers
 help / color / mirror / code / Atom feed
* Zsh parser segmentation fault in putpromptchar putpromptchar at prompt.c
@ 2017-05-08 18:42 ` Eduardo Bustamante
  2017-05-09  8:30   ` Peter Stephenson
  0 siblings, 1 reply; 2+ messages in thread
From: Eduardo Bustamante @ 2017-05-08 18:42 UTC (permalink / raw)
  To: zsh-workers; +Cc: Eduardo A. Bustamante López

[-- Attachment #1: Type: text/plain, Size: 2234 bytes --]

dualbus@debian:~/bash-fuzzing/zsh-parser$ base64 segfault
JHsoJVUpWS0lKHZ9

dualbus@debian:~/bash-fuzzing/zsh-parser$ md5sum segfault
0d79a8c613315f32a453d5aa07a7de65  segfault

dualbus@debian:~/bash-fuzzing/zsh-parser$ cat -v segfault
${(%U)Y-%(v}

(gdb) r -n segfault
Starting program: /home/dualbus/src/zsh/zsh/Src/zsh -n segfault
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".

Program received signal SIGSEGV, Segmentation fault.
0x00000000004aab3e in putpromptchar (doprint=1, endchar=0,
txtchangep=0x0) at prompt.c:403
403                             if (*psvar[(arg ? arg : 1) - 1])
(gdb) bt
#0  0x00000000004aab3e in putpromptchar (doprint=1, endchar=0,
txtchangep=0x0) at prompt.c:403
#1  0x00000000004aa170 in promptexpand (s=0x7ffff7e5b3f8 "%(V", ns=0,
rs=0x0, Rs=0x0, txtchangep=0x0) at prompt.c:215
#2  0x00000000004bd792 in paramsubst (l=0x7fffffffbfa0,
n=0x7ffff7e5b3d8, str=0x7fffffffb950, qt=0, pf_flags=0,
    ret_flags=0x7fffffffbf2c) at subst.c:3589
#3  0x00000000004b4fe3 in stringsubst (list=0x7fffffffbfa0,
node=0x7ffff7e5b3d8, pf_flags=0, ret_flags=0x7fffffffbf2c, asssub=0)
    at subst.c:247
#4  0x00000000004b4395 in prefork (list=0x7fffffffbfa0, flags=0,
ret_flags=0x7fffffffbf2c) at subst.c:85
#5  0x0000000000440df5 in execcmd_getargs (preargs=0x7ffff7e5b3c0,
args=0x7ffff7e5b380, expand=1) at exec.c:2659
#6  0x000000000043c1eb in execcmd_exec (state=0x7fffffffde40,
eparams=0x7fffffffcd00, input=0, output=0, how=18, last1=2)
    at exec.c:2765
#7  0x000000000043b804 in execpline2 (state=0x7fffffffde40, pcode=131,
how=18, input=0, output=0, last1=0) at exec.c:1873
#8  0x0000000000433f6e in execpline (state=0x7fffffffde40,
slcode=3074, how=18, last1=0) at exec.c:1602
#9  0x0000000000432dfe in execlist (state=0x7fffffffde40,
dont_change_job=0, exiting=0) at exec.c:1360
#10 0x000000000043277e in execode (p=0x7ffff7e5b320,
dont_change_job=0, exiting=0, context=0x4d9174 "toplevel") at
exec.c:1141
#11 0x000000000045e366 in loop (toplevel=1, justonce=0) at init.c:208
#12 0x00000000004627d6 in zsh_main (argc=3, argv=0x7fffffffe468) at init.c:1692
#13 0x0000000000411a32 in main (argc=3, argv=0x7fffffffe468) at ./main.c:93

[-- Attachment #2: segfault --]
[-- Type: application/octet-stream, Size: 12 bytes --]

${(%U)Y-%(v}

^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: Zsh parser segmentation fault in putpromptchar putpromptchar at prompt.c
  2017-05-08 18:42 ` Zsh parser segmentation fault in putpromptchar putpromptchar at prompt.c Eduardo Bustamante
@ 2017-05-09  8:30   ` Peter Stephenson
  0 siblings, 0 replies; 2+ messages in thread
From: Peter Stephenson @ 2017-05-09  8:30 UTC (permalink / raw)
  To: zsh-workers

On Mon, 8 May 2017 13:42:46 -0500
Eduardo Bustamante <dualbus@gmail.com> wrote:
> dualbus@debian:~/bash-fuzzing/zsh-parser$ base64 segfault
> JHsoJVUpWS0lKHZ9
> 
> dualbus@debian:~/bash-fuzzing/zsh-parser$ md5sum segfault
> 0d79a8c613315f32a453d5aa07a7de65  segfault
> 
> dualbus@debian:~/bash-fuzzing/zsh-parser$ cat -v segfault
> ${(%U)Y-%(v}

The test for psvar is wrong if it's empty.

pws

diff --git a/Src/prompt.c b/Src/prompt.c
index 29e006e..c478e69 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 0818728..11f18dc 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
+>


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2017-05-09  8:30 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <CGME20170508184346epcas2p364369da57566738a36b888054303eee5@epcas2p3.samsung.com>
2017-05-08 18:42 ` Zsh parser segmentation fault in putpromptchar putpromptchar at prompt.c Eduardo Bustamante
2017-05-09  8:30   ` Peter Stephenson

Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/zsh/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).