path: root/diff.c
diff options
authorPavel Roskin <>2005-07-29 14:49:14 (GMT)
committerJunio C Hamano <>2005-07-30 00:21:48 (GMT)
commite35f9824159bba94eecdf22d198799701ed60940 (patch)
tree0d1d08eec92d179ce02b4c4b5e961e0f6c1feddc /diff.c
parent1df092d211868b3b74f5b3981fad9b195a0bedad (diff)
[PATCH] mmap error handling
I have reviewed all occurrences of mmap() in git and fixed three types of errors/defects: 1) The result is not checked. 2) The file descriptor is closed if mmap() succeeds, but not when it fails. 3) Various casts applied to -1 are used instead of MAP_FAILED, which is specifically defined to check mmap() return value. [jc: This is a second round of Pavel's patch. He fixed up the problem that close() potentially clobbering the errno from mmap, which the first round had.] Signed-off-by: Pavel Roskin <> Signed-off-by: Junio C Hamano <>
Diffstat (limited to 'diff.c')
1 files changed, 3 insertions, 1 deletions
diff --git a/diff.c b/diff.c
index 4a4b621..361d7c0 100644
--- a/diff.c
+++ b/diff.c
@@ -377,8 +377,10 @@ int diff_populate_filespec(struct diff_filespec *s, int size_only)
if (fd < 0)
goto err_empty;
s->data = mmap(NULL, s->size, PROT_READ, MAP_PRIVATE, fd, 0);
- s->should_munmap = 1;
+ if (s->data == MAP_FAILED)
+ goto err_empty;
+ s->should_munmap = 1;
else {
char type[20];