diff options
author | Junio C Hamano <junkio@cox.net> | 2007-01-19 00:39:32 -0800 |
---|---|---|
committer | Junio C Hamano <junkio@cox.net> | 2007-01-19 00:41:37 -0800 |
commit | cb48cb585f3bed37467565ed35889726568a442d (patch) | |
tree | c0f54f5c6241566c92a7349403f8b5d4896795bf /refs.c | |
parent | 2266bf27b354a08522406eff916898b6300ddfa0 (diff) | |
download | git-cb48cb585f3bed37467565ed35889726568a442d.tar.gz |
refs.c::read_ref_at(): fix bogus munmap() call.
The code uses mmap() to read reflog data, but moves the pointer around
while reading, and uses that updated pointer in the call to munmap().
Signed-off-by: Junio C Hamano <junkio@cox.net>
Diffstat (limited to 'refs.c')
-rw-r--r-- | refs.c | 8 |
1 files changed, 5 insertions, 3 deletions
@@ -1025,6 +1025,7 @@ int read_ref_at(const char *ref, unsigned long at_time, int cnt, unsigned char * struct stat st; unsigned long date; unsigned char logged_sha1[20]; + void *log_mapped; logfile = git_path("logs/%s", ref); logfd = open(logfile, O_RDONLY, 0); @@ -1033,7 +1034,8 @@ int read_ref_at(const char *ref, unsigned long at_time, int cnt, unsigned char * fstat(logfd, &st); if (!st.st_size) die("Log %s is empty.", logfile); - logdata = xmmap(NULL, st.st_size, PROT_READ, MAP_PRIVATE, logfd, 0); + log_mapped = xmmap(NULL, st.st_size, PROT_READ, MAP_PRIVATE, logfd, 0); + logdata = log_mapped; close(logfd); lastrec = NULL; @@ -1078,7 +1080,7 @@ int read_ref_at(const char *ref, unsigned long at_time, int cnt, unsigned char * logfile, show_rfc2822_date(date, tz)); } } - munmap((void*)logdata, st.st_size); + munmap(log_mapped, st.st_size); return 0; } lastrec = rec; @@ -1095,7 +1097,7 @@ int read_ref_at(const char *ref, unsigned long at_time, int cnt, unsigned char * tz = strtoul(tz_c, NULL, 10); if (get_sha1_hex(logdata, sha1)) die("Log %s is corrupt.", logfile); - munmap((void*)logdata, st.st_size); + munmap(log_mapped, st.st_size); if (at_time) fprintf(stderr, "warning: Log %s only goes back to %s.\n", logfile, show_rfc2822_date(date, tz)); |