Check the buffer size when copying the line returned by el_gets() into our
own buffer. Interactively typing in long lines (>1023 characters) previously overflowed the buffer. Unlike the NetBSD people I don't see the need to subtract 8 from BUFSIZ, so I just used BUFSIZ-1. Obtained from: NetBSD PR: 91110
This commit is contained in:
parent
cef31ff7d9
commit
896229d920
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=158143
@ -184,14 +184,23 @@ preadfd(void)
|
||||
retry:
|
||||
#ifndef NO_HISTORY
|
||||
if (parsefile->fd == 0 && el) {
|
||||
const char *rl_cp;
|
||||
static const char *rl_cp;
|
||||
static int el_len;
|
||||
|
||||
rl_cp = el_gets(el, &nr);
|
||||
if (rl_cp == NULL)
|
||||
rl_cp = el_gets(el, &el_len);
|
||||
if (rl_cp == NULL)
|
||||
nr = 0;
|
||||
else {
|
||||
/* XXX - BUFSIZE should redesign so not necessary */
|
||||
(void) strcpy(parsenextc, rl_cp);
|
||||
nr = el_len;
|
||||
if (nr > BUFSIZ - 1)
|
||||
nr = BUFSIZ - 1;
|
||||
memcpy(parsenextc, rl_cp, nr);
|
||||
if (nr != el_len) {
|
||||
el_len -= nr;
|
||||
rl_cp += nr;
|
||||
} else
|
||||
rl_cp = NULL;
|
||||
}
|
||||
} else
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user