diff options
author | jedgar <jedgar@FreeBSD.org> | 2001-01-29 10:47:44 +0800 |
---|---|---|
committer | jedgar <jedgar@FreeBSD.org> | 2001-01-29 10:47:44 +0800 |
commit | f4c434a6e5d3f15556ac5e01061d4153320c9ac8 (patch) | |
tree | 84bda9544e6aecaa662f4299648c9cecfe6a472e /japanese/elvis | |
parent | e3f961fa206a68685e8e49c7befb295f5927ab12 (diff) | |
download | freebsd-ports-gnome-f4c434a6e5d3f15556ac5e01061d4153320c9ac8.tar.gz freebsd-ports-gnome-f4c434a6e5d3f15556ac5e01061d4153320c9ac8.tar.zst freebsd-ports-gnome-f4c434a6e5d3f15556ac5e01061d4153320c9ac8.zip |
Fix exploitable buffer overflow in elvrec
Diffstat (limited to 'japanese/elvis')
-rw-r--r-- | japanese/elvis/files/patch-elvrec.c | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/japanese/elvis/files/patch-elvrec.c b/japanese/elvis/files/patch-elvrec.c new file mode 100644 index 000000000000..0fc758617127 --- /dev/null +++ b/japanese/elvis/files/patch-elvrec.c @@ -0,0 +1,55 @@ +--- elvrec.c.orig Mon Mar 21 14:27:37 1994 ++++ elvrec.c Sun Jan 28 20:52:16 2001 +@@ -10,6 +10,7 @@ + */ + + ++#include <sys/param.h> + #include <stdio.h> + #include "config.h" + #include "vi.h" +@@ -22,8 +23,8 @@ + char *basename; /* the name of the file to recover */ + char *outname; /* the name of the file to write to */ + { +- char pathname[500]; /* full pathname of the file to recover */ +- char line[600]; /* a line from the /usr/preserve/Index file */ ++ char pathname[MAXPATHLEN]; /* full pathname of the file to recover */ ++ char line[MAXPATHLEN]; /* a line from the /usr/preserve/Index file */ + int ch; /* a character from the text being recovered */ + FILE *from; /* the /usr/preserve file, or /usr/preserve/Index */ + FILE *to; /* the user's text file */ +@@ -42,19 +43,15 @@ + if (basename[0] != SLASH) + # endif + { +- ptr = getcwd(pathname, sizeof pathname); +- if (ptr != pathname) +- { +- strcpy(pathname, ptr); +- } +- ptr = pathname + strlen(pathname); +- *ptr++ = SLASH; +- strcpy(ptr, basename); ++ if ((ptr = getcwd(pathname, sizeof pathname)) == NULL) ++ err(1, "getcwd() failed"); ++ snprintf(pathname, sizeof(pathname), "%s/%s", ptr, ++ basename); + } + else + #endif + { +- strcpy(pathname, basename); ++ strlcpy(pathname, basename, sizeof(pathname)); + } + } + +@@ -67,6 +64,8 @@ + * version of this file. + */ + from = fopen(PRSVINDEX, "r"); ++ if (!from) ++ err(1, "fopen() %s failed", PRSVINDEX); + while (from && fgets(line, sizeof line, from)) + { + /* strip off the newline from the end of the string */ |