Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
Re: .zsh_history bugreport
- X-seq: zsh-workers 16182
- From: Wayne Davison <wayned@xxxxxxxxxxxxxxxxxxxxx>
- To: Bart Schaefer <schaefer@xxxxxxxxxxxxxxxx>
- Subject: Re: .zsh_history bugreport
- Date: Fri, 26 Oct 2001 11:26:15 -0700 (PDT)
- Cc: Stepan Koltsov <yozh@xxxxxx>, zsh-workers@xxxxxxxxxx
- In-reply-to: <1011026145410.ZM10567@xxxxxxxxxxxxxxxxxxxxxxx>
- Mailing-list: contact zsh-workers-help@xxxxxxxxxx; run by ezmlm
On Fri, 26 Oct 2001, Bart Schaefer wrote:
> This was fixed by the patch in users/4269 and should be working in the
> zsh-4.0.4 release from earlier today.
Hmm. The start >= l (ell) check can only error-out if the null byte
is at the start of the line (since once a section gets measured, it
can't ever get any shorter).
I think the real fix is to check if the string is too short when we
didn't find a newline at the end (i.e. the buffer should be maxed out
when fgets really didn't read a newline). What's currently happening
is that we're doubling the readline buffer every time we get a short
read, and we may have only really added a few bytes to the buffer.
I think this is the right fix:
Index: Src/hist.c
--- Src/hist.c 2001/10/15 18:42:52 1.35
+++ Src/hist.c 2001/10/26 18:09:54
@@ -1772,11 +1772,10 @@
if (fgets(buf + start, *bufsiz - start, in)) {
int l = strlen(buf);
- if (start >= l)
- return -1;
-
if (l) {
if (buf[l - 1] != '\n' && !feof(in)) {
+ if (l < *bufsiz - 1)
+ return -1;
*bufp = zrealloc(buf, 2 * (*bufsiz));
*bufsiz = 2 * (*bufsiz);
return readhistline(l, bufp, bufsiz, in);
..wayne..
Messages sorted by:
Reverse Date,
Date,
Thread,
Author