From: Andrey Okoshkin Date: Fri, 27 Oct 2017 09:33:25 +0000 (+0300) Subject: diff: fix lstat() error handling in diff_populate_filespec() X-Git-Tag: v2.15.1~28^2 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=10e0ca843dea3e8135678600f22e0baa1edf6e44;hp=42e6fde5c28150206956ea4be490d886c4ecbd68;p=thirdparty%2Fgit.git diff: fix lstat() error handling in diff_populate_filespec() Add lstat() error handling not only for ENOENT case. Otherwise uninitialised 'struct stat st' variable is used later in case of lstat() non-ENOENT failure which leads to processing of rubbish values of file mode ('S_ISLNK(st.st_mode)' check) or size ('xsize_t(st.st_size)'). Signed-off-by: Andrey Okoshkin Signed-off-by: Junio C Hamano --- diff --git a/diff.c b/diff.c index 74283d9001..4f72009e87 100644 --- a/diff.c +++ b/diff.c @@ -2848,14 +2848,12 @@ int diff_populate_filespec(struct diff_filespec *s, unsigned int flags) int fd; if (lstat(s->path, &st) < 0) { - if (errno == ENOENT) { - err_empty: - err = -1; - empty: - s->data = (char *)""; - s->size = 0; - return err; - } + err_empty: + err = -1; + empty: + s->data = (char *)""; + s->size = 0; + return err; } s->size = xsize_t(st.st_size); if (!s->size)