Make sure we pass the length - 1 to readlink, since it adds its own
NUL at the end of the path. Inspired by: OpenBSD's changes in this area by theo de raadt
This commit is contained in:
parent
39b14624c5
commit
e00e592a7a
@ -36,7 +36,7 @@
|
||||
static char sccsid[] = "@(#)utils.c 8.3 (Berkeley) 4/1/94";
|
||||
#endif
|
||||
static const char rcsid[] =
|
||||
"$Id: utils.c,v 1.17 1998/05/06 06:50:25 charnier Exp $";
|
||||
"$Id: utils.c,v 1.18 1998/05/13 07:25:17 charnier Exp $";
|
||||
#endif /* not lint */
|
||||
|
||||
#include <sys/param.h>
|
||||
@ -208,7 +208,7 @@ copy_link(p, exists)
|
||||
int len;
|
||||
char link[MAXPATHLEN];
|
||||
|
||||
if ((len = readlink(p->fts_path, link, sizeof(link))) == -1) {
|
||||
if ((len = readlink(p->fts_path, link, sizeof(link) - 1)) == -1) {
|
||||
warn("readlink: %s", p->fts_path);
|
||||
return (1);
|
||||
}
|
||||
|
@ -36,7 +36,7 @@
|
||||
static char sccsid[] = "@(#)dir.c 8.1 (Berkeley) 5/31/93";
|
||||
#else
|
||||
static const char rcsid[] =
|
||||
"$Id: dir.c,v 1.6 1997/02/22 14:01:42 peter Exp $";
|
||||
"$Id: dir.c,v 1.7 1997/08/07 21:42:05 steve Exp $";
|
||||
#endif
|
||||
#endif /* not lint */
|
||||
|
||||
@ -705,8 +705,7 @@ dcanon(cp, p)
|
||||
*/
|
||||
*--sp = 0; /* form the pathname for readlink */
|
||||
if (sp != cp && !adrof(STRignore_symlinks) &&
|
||||
(cc = readlink(short2str(cp), tlink,
|
||||
sizeof tlink)) >= 0) {
|
||||
(cc = readlink(short2str(cp), tlink, sizeof(tlink) - 1)) >= 0) {
|
||||
(void) Strcpy(link, str2short(tlink));
|
||||
link[cc] = '\0';
|
||||
|
||||
@ -790,8 +789,7 @@ dcanon(cp, p)
|
||||
|
||||
if (sp != cp && adrof(STRchase_symlinks) &&
|
||||
!adrof(STRignore_symlinks) &&
|
||||
(cc = readlink(short2str(cp), tlink,
|
||||
sizeof tlink)) >= 0) {
|
||||
(cc = readlink(short2str(cp), tlink, sizeof(tlink) - 1)) >= 0) {
|
||||
(void) Strcpy(link, str2short(tlink));
|
||||
link[cc] = '\0';
|
||||
|
||||
|
@ -40,7 +40,7 @@
|
||||
static char sccsid[] = "@(#)ftree.c 8.2 (Berkeley) 4/18/94";
|
||||
#endif
|
||||
static const char rcsid[] =
|
||||
"$Id$";
|
||||
"$Id: ftree.c,v 1.10 1998/05/15 06:27:42 charnier Exp $";
|
||||
#endif /* not lint */
|
||||
|
||||
#include <sys/types.h>
|
||||
@ -508,14 +508,14 @@ next_file(arcn)
|
||||
* have to read the symlink path from the file
|
||||
*/
|
||||
if ((cnt = readlink(ftent->fts_path, arcn->ln_name,
|
||||
PAXPATHLEN)) < 0) {
|
||||
PAXPATHLEN - 1)) < 0) {
|
||||
sys_warn(1, errno, "Unable to read symlink %s",
|
||||
ftent->fts_path);
|
||||
continue;
|
||||
}
|
||||
/*
|
||||
* set link name length, watch out readlink does not
|
||||
* allways null terminate the link path
|
||||
* allways NUL terminate the link path
|
||||
*/
|
||||
arcn->ln_name[cnt] = '\0';
|
||||
arcn->ln_nlen = cnt;
|
||||
|
Loading…
Reference in New Issue
Block a user