From 129614b99f129e9baffbf8066656ed0dc7979aa5 Mon Sep 17 00:00:00 2001 From: Martijn Dekker Date: Thu, 28 Jan 2021 04:35:46 +0000 Subject: [PATCH] edit/vi.c: sanity checks from OpenSUSE Source: https://build.opensuse.org/package/view_file/shells/ksh/ksh93-vi.dif Patch from 2007, apparently never upstreamed. --- src/cmd/ksh93/edit/vi.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/cmd/ksh93/edit/vi.c b/src/cmd/ksh93/edit/vi.c index c4c056533..8ab7583e3 100644 --- a/src/cmd/ksh93/edit/vi.c +++ b/src/cmd/ksh93/edit/vi.c @@ -385,6 +385,8 @@ int ed_viread(void *context, int fd, register char *shbuf, int nchar, int reedit if(!yankbuf) yankbuf = (genchar*)malloc(MAXLINE*CHARSIZE); + if(!vp->lastline) + vp->lastline = (genchar*)malloc(MAXLINE*CHARSIZE); if( vp->last_cmd == '\0' ) { /*** first time for this shell ***/ @@ -394,6 +396,8 @@ int ed_viread(void *context, int fd, register char *shbuf, int nchar, int reedit vp->lastmotion = '\0'; vp->lastrepeat = 1; vp->repeat = 1; + if(!yankbuf) + return(-1); *yankbuf = 0; } @@ -1117,7 +1121,7 @@ static void cdelete(Vi_t *vp,register int nchars, int mode) /*** save characters to be deleted ***/ - if( mode != 'c' ) + if( mode != 'c' && yankbuf ) { i = cp[nchars]; cp[nchars] = 0; @@ -2172,6 +2176,8 @@ static void save_last(register Vi_t* vp) { register int i; + if(vp->lastline == NULL) + return; if( (i = cur_virt - first_virt + 1) > 0 ) { /*** save last thing user typed ***/ @@ -2420,6 +2426,8 @@ static int textmod(register Vi_t *vp,register int c, int mode) /*** change p from lastline to yankbuf ***/ p = yankbuf; } + if(!p) + return(BAD); addin: switch( c ) @@ -2693,6 +2701,8 @@ yankeol: vp->lastmotion = c; if( c == 'y' ) { + if(!yankbuf) + return(BAD); gencpy(yankbuf, virtual); } else if(!delmotion(vp, c, 'y'))