Thread (65 messages) flat view 65 messages, 4 authors, 2016-06-15
STALE3727d

[PATCH] ls-files: do not trust stat info if lstat() fails

From: Nguyễn Thái Ngọc Duy <hidden>
Date: 2016-06-15 23:00:34
Subsystem: the rest · Maintainer: Linus Torvalds

If 'err' is non-zero, lstat() has failed. Consider the entry modified
without passing the (unreliable) stat info to ce_modified() in this
case.

Noticed-by: Eric Sunshine [off-list ref]
Signed-off-by: Nguyễn Thái Ngọc Duy <redacted>
---
 On Fri, Mar 28, 2014 at 11:04 AM, Eric Sunshine [off-list ref] wrote:
 > On Wed, Mar 26, 2014 at 9:48 AM, Nguyễn Thái Ngọc Duy [off-list ref] wrote:
 >> +               err = lstat(ce->name, &st);
 >> +               if (show_deleted && err) {
 >> +                       show_ce_entry(tag_removed, ce);
 >> +                       shown = 1;
 >> +               }
 >> +               if (show_modified && ce_modified(ce, &st, 0)) {
 >
 > Is it possible for the lstat() to have failed for some reason when we
 > get here? If so, relying upon 'st' is unsafe, isn't it?

 The chance of random stat making ce_modified() return false is pretty
 low, but you're right. This code is a copy from the old show_files().
 I'll fix it in the git-ls series. Meanwhile a patch for maint to fix
 the original function.

 builtin/ls-files.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/builtin/ls-files.c b/builtin/ls-files.c
index 47c3880..e6bd00e 100644
--- a/builtin/ls-files.c
+++ b/builtin/ls-files.c
@@ -260,7 +260,7 @@ static void show_files(struct dir_struct *dir)
 			err = lstat(ce->name, &st);
 			if (show_deleted && err)
 				show_ce_entry(tag_removed, ce);
-			if (show_modified && ce_modified(ce, &st, 0))
+			if (show_modified && (err || ce_modified(ce, &st, 0)))
 				show_ce_entry(tag_modified, ce);
 		}
 	}
-- 
1.9.1.345.ga1a145c
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help