diff options
author | knu <knu@FreeBSD.org> | 2002-01-22 00:02:52 +0800 |
---|---|---|
committer | knu <knu@FreeBSD.org> | 2002-01-22 00:02:52 +0800 |
commit | 71ff66a8fcfb659ea9d402718b239614b773784d (patch) | |
tree | cbfc91590e0becaf1fd9ed045012b243210c78da /shells/fd/files | |
parent | 3215787ef681782cec8d2bb1a58cad32adddfe83 (diff) | |
download | freebsd-ports-gnome-71ff66a8fcfb659ea9d402718b239614b773784d.tar.gz freebsd-ports-gnome-71ff66a8fcfb659ea9d402718b239614b773784d.tar.zst freebsd-ports-gnome-71ff66a8fcfb659ea9d402718b239614b773784d.zip |
Add a patch submitted by the author which fixes a bug I reported where
fd occasionally dies of a segfault caused by a buffer overrun on
command invocation.
Bump PORTREVISION accordingly.
Diffstat (limited to 'shells/fd/files')
-rw-r--r-- | shells/fd/files/patch-parse.c | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/shells/fd/files/patch-parse.c b/shells/fd/files/patch-parse.c new file mode 100644 index 000000000000..4e809b6e64d6 --- /dev/null +++ b/shells/fd/files/patch-parse.c @@ -0,0 +1,48 @@ +diff -u ../old/FD-1.03u/parse.c ./parse.c +--- ../old/FD-1.03u/parse.c Tue Dec 18 00:00:00 2001 ++++ ./parse.c Mon Jan 21 10:15:02 2002 +@@ -322,11 +322,16 @@ + epath = next = NULL; + size = 0; + for (cp = path; cp && *cp; cp = next) { +- next = strtkbrk(cp, delim, 0); +- len = (next) ? (next++) - cp : strlen(cp); +- if (!len) next = cp; ++ if ((next = strtkbrk(cp, delim, 0))) { ++ len = next - cp; ++ for (i = 1; next[i] && strchr(delim, next[i]); i++); ++ } + else { +- next = cp + len; ++ len = strlen(cp); ++ i = 0; ++ } ++ next = cp + len; ++ if (len) { + tmp = _evalpath(cp, next, 0, 0); + # if !MSDOS && !defined (_NOKANJIFCONV) + cp = kanjiconv2(buf, tmp, +@@ -336,17 +341,18 @@ + # endif + len = strlen(cp); + } +- for (i = 1; next[i] && strchr(delim, next[i]); i++); + + epath = (char *)realloc2(epath, size + len + i + 1); + if (len) { + strcpy(epath + size, cp); + free(tmp); ++ size += len; ++ } ++ if (i) { ++ strncpy(epath + size, next, i); ++ size += i; ++ next += i; + } +- size += len; +- strncpy(epath + size, next, i); +- size += i; +- next += i; + } + + if (!epath) return(strdup2("")); |