diff options
author | Andrey Okoshkin <a.okoshkin@samsung.com> | 2017-10-27 12:33:25 +0300 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2017-10-29 10:16:36 +0900 |
commit | 10e0ca843dea3e8135678600f22e0baa1edf6e44 (patch) | |
tree | 4e6e9b164aaf5c3e77a1f42c58bdf54866cd3ba1 | |
parent | 42e6fde5c28150206956ea4be490d886c4ecbd68 (diff) | |
download | git-10e0ca843dea3e8135678600f22e0baa1edf6e44.tar.gz |
diff: fix lstat() error handling in diff_populate_filespec()ao/diff-populate-filespec-lstat-errorpath-fix
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 <a.okoshkin@samsung.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r-- | diff.c | 14 |
1 files changed, 6 insertions, 8 deletions
@@ -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) |