Module Name:    src
Committed By:   christos
Date:           Fri Feb 18 20:53:05 UTC 2011

Modified Files:
        src/lib/libedit: read.c

Log Message:
PR/44599: Steven Vernon: libedit acts as if no data read if editmode is turned
off because nread is uninitialized in the edit disabled case.
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    lib-bug-people
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Fri Feb 18 19:35:00 +0000 2011
>Release:        sources as of 2011/02/04
>Organization:


To generate a diff of this commit:
cvs rdiff -u -r1.57 -r1.58 src/lib/libedit/read.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/lib/libedit/read.c
diff -u src/lib/libedit/read.c:1.57 src/lib/libedit/read.c:1.58
--- src/lib/libedit/read.c:1.57	Wed Jul 21 14:18:52 2010
+++ src/lib/libedit/read.c	Fri Feb 18 15:53:05 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: read.c,v 1.57 2010/07/21 18:18:52 christos Exp $	*/
+/*	$NetBSD: read.c,v 1.58 2011/02/18 20:53:05 christos Exp $	*/
 
 /*-
  * Copyright (c) 1992, 1993
@@ -37,7 +37,7 @@
 #if 0
 static char sccsid[] = "@(#)read.c	8.1 (Berkeley) 6/4/93";
 #else
-__RCSID("$NetBSD: read.c,v 1.57 2010/07/21 18:18:52 christos Exp $");
+__RCSID("$NetBSD: read.c,v 1.58 2011/02/18 20:53:05 christos Exp $");
 #endif
 #endif /* not lint && not SCCSID */
 
@@ -469,7 +469,7 @@
 	int retval;
 	el_action_t cmdnum = 0;
 	int num;		/* how many chars we have read at NL */
-	Char ch;
+	Char ch, *cp;
 	int crlf = 0;
 	int nrb;
 #ifdef FIONREAD
@@ -481,9 +481,9 @@
 	*nread = 0;
 
 	if (el->el_flags & NO_TTY) {
-		Char *cp = el->el_line.buffer;
 		size_t idx;
 
+		cp = el->el_line.buffer;
 		while ((num = (*el->el_read.read_char)(el, cp)) == 1) {
 			/* make sure there is space for next character */
 			if (cp + 1 >= el->el_line.limit) {
@@ -504,10 +504,7 @@
 			el->el_errno = errno;
 		}
 
-		el->el_line.cursor = el->el_line.lastchar = cp;
-		*cp = '\0';
-		*nread = (int)(el->el_line.cursor - el->el_line.buffer);
-		goto done;
+		goto noedit;
 	}
 
 
@@ -530,7 +527,6 @@
 		read_prepare(el);
 
 	if (el->el_flags & EDIT_DISABLED) {
-		Char *cp;
 		size_t idx;
 
 		if ((el->el_flags & UNBUFFERED) == 0)
@@ -562,9 +558,7 @@
 			el->el_errno = errno;
 		}
 
-		el->el_line.cursor = el->el_line.lastchar = cp;
-		*cp = '\0';
-		goto done;
+		goto noedit;
 	}
 
 	for (num = OKCMD; num == OKCMD;) {	/* while still editing this
@@ -707,6 +701,11 @@
 	} else {
 		*nread = (int)(el->el_line.lastchar - el->el_line.buffer);
 	}
+	goto done;
+noedit:
+	el->el_line.cursor = el->el_line.lastchar = cp;
+	*cp = '\0';
+	*nread = (int)(el->el_line.cursor - el->el_line.buffer);
 done:
 	if (*nread == 0) {
 		if (num == -1) {

Reply via email to