diff options
author | Jim Meyering <meyering@redhat.com> | 2009-09-29 07:28:01 +0200 |
---|---|---|
committer | Jim Meyering <meyering@redhat.com> | 2009-09-29 14:12:30 +0200 |
commit | b7aaa0da8b47f4f373d3e0876bd540986278c6e2 (patch) | |
tree | 7e3d1bbd71964a5e001afa172e43749bc29d0246 | |
parent | 36edf7bad2ab76720a0bf6519074d23d4b8823a7 (diff) | |
download | coreutils-b7aaa0da8b47f4f373d3e0876bd540986278c6e2.tar.xz |
ls: don't use an undefined struct stat after failed stat/lstat
* src/ls.c (format_inode): Access f->stat only if f->stat_ok is set.
* NEWS (Bug fixes): Mention it.
Improved-by: Pádraig Brady <P@draigBrady.com>
-rw-r--r-- | NEWS | 4 | ||||
-rw-r--r-- | src/ls.c | 6 |
2 files changed, 7 insertions, 3 deletions
@@ -21,6 +21,10 @@ GNU coreutils NEWS -*- outline -*- ls -Li is now consistent with ls -Lil in printing "?", not "0" as the inode of a dangling symlink. + ls -Li no longer relies on unspecified behavior of stat/lstat. + Before this change, "ls -Li dangling-symlink" would mistakenly + print the inode number of the symlink under some conditions. + ** Portability On Solaris 9, many commands would mistakenly treat file/ the same as @@ -3563,9 +3563,9 @@ static char * format_inode (char *buf, size_t buflen, const struct fileinfo *f) { assert (INT_BUFSIZE_BOUND (uintmax_t) <= buflen); - return (f->stat.st_ino == NOT_AN_INODE_NUMBER - ? (char *) "?" - : umaxtostr (f->stat.st_ino, buf)); + return (f->stat_ok && f->stat.st_ino != NOT_AN_INODE_NUMBER + ? umaxtostr (f->stat.st_ino, buf) + : (char *) "?"); } /* Print information about F in long format. */ |