vBulletin Search Engine Optimization
| |||||||
| Register | FAQ | Members List | Calendar | Search | Today's Posts | Mark Forums Read |
| ||||
| Two small diffs: 1) Use MAXPATHLEN-sized buf for path and snprintf return value to detect truncation. 2) Handle empty macdefs so ftp doesn't go nuts and segfault when you try to use the macro (a similar fix is already in cmds.c). -- Nicholas. Index: ruserpass.c ================================================== ================= RCS file: /cvs/src/usr.bin/ftp/ruserpass.c,v retrieving revision 1.20 diff -u -p -r1.20 ruserpass.c --- ruserpass.c 16 May 2006 23:43:16 -0000 1.20 +++ ruserpass.c 21 Mar 2007 20:46:13 -0000 @@ -83,17 +83,17 @@ static struct toktab { int ruserpass(const char *host, char **aname, char **apass, char **aacct) { - char *hdir, buf[BUFSIZ], *tmp; + char *hdir, buf[MAXPATHLEN], *tmp; char myname[MAXHOSTNAMELEN], *mydomain; - int t, i, c, usedefault = 0; + int t, i, c, n, usedefault = 0; struct stat stb; hdir = getenv("HOME"); if (hdir == NULL || *hdir == '\0') return (0); - if (strlen(hdir) + sizeof(".netrc") < sizeof(buf)) { - (void)snprintf(buf, sizeof buf, "%s/.netrc", hdir); - } else { + if ((n = snprintf(buf, sizeof(buf), "%s/.netrc", hdir)) < 0) + err(1, "snprintf"); + if (n >= sizeof(buf)) { warnx("%s/.netrc: %s", hdir, strerror(ENAMETOOLONG)); return (0); } Index: ruserpass.c ================================================== ================= RCS file: /cvs/src/usr.bin/ftp/ruserpass.c,v retrieving revision 1.20 diff -u -p -r1.20 ruserpass.c --- ruserpass.c 16 May 2006 23:43:16 -0000 1.20 +++ ruserpass.c 21 Mar 2007 19:42:59 -0000 @@ -228,9 +228,13 @@ next: } *tmp = c; if (*tmp == '\n') { - if (*(tmp-1) == '\0') { - macros[macnum++].mac_end = tmp - 1; - break; + if (tmp == macros[macnum].mac_start) { + macros[macnum++].mac_end = tmp; + break; + } else if (*(tmp - 1) == '\0') { + macros[macnum++].mac_end = + tmp - 1; + break; } *tmp = '\0'; } |