File ksh93-vi.dif of Package ksh

--- src/cmd/ksh93/edit/vi.c
+++ src/cmd/ksh93/edit/vi.c	2007-03-28 18:41:47.032501418 +0200
@@ -401,6 +401,8 @@ int ed_viread(void *context, int fd, reg
 
 	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 ***/
@@ -410,6 +412,8 @@ int ed_viread(void *context, int fd, reg
 		vp->lastmotion = '\0';
 		vp->lastrepeat = 1;
 		vp->repeat = 1;
+		if (!yankbuf)
+			return(-1);
 		*yankbuf = 0;
 	}
 
@@ -1075,7 +1079,7 @@ static void cdelete(Vi_t *vp,register in
 
 		/*** save characters to be deleted ***/
 
-		if( mode != 'c' )
+		if( mode != 'c' && yankbuf )
 		{
 			i = cp[nchars];
 			cp[nchars] = 0;
@@ -2047,6 +2051,9 @@ 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 ***/
@@ -2292,6 +2299,11 @@ static int textmod(register Vi_t *vp,reg
 		p = yankbuf;
 	}
 
+	if (!p)
+	{
+		return(BAD);
+	}
+
 addin:
 	switch( c )
 	{
@@ -2564,6 +2576,8 @@ yankeol:
 		vp->lastmotion = c;
 		if( c == 'y' )
 		{
+			if (!yankbuf)
+				return(BAD);
 			gencpy(yankbuf, virtual);
 		}
 		else if(!delmotion(vp, c, 'y'))
openSUSE Build Service is sponsored by