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) {