aboutsummaryrefslogtreecommitdiffstats
path: root/shells/fd/files
diff options
context:
space:
mode:
authorknu <knu@FreeBSD.org>2002-01-22 00:02:52 +0800
committerknu <knu@FreeBSD.org>2002-01-22 00:02:52 +0800
commit71ff66a8fcfb659ea9d402718b239614b773784d (patch)
treecbfc91590e0becaf1fd9ed045012b243210c78da /shells/fd/files
parent3215787ef681782cec8d2bb1a58cad32adddfe83 (diff)
downloadfreebsd-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.c48
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(""));