Commit 2ee318a7 by Carlos Martín Nieto

Small fixes in pack_window_open

Check if the window structure has actually been allocated before
trying to access it, and don't leak said structure if the map fails.

Signed-off-by: Carlos Martín Nieto <cmn@elego.de>
parent d830919a
...@@ -480,6 +480,9 @@ static unsigned char *pack_window_open( ...@@ -480,6 +480,9 @@ static unsigned char *pack_window_open(
size_t len; size_t len;
win = git__calloc(1, sizeof(*win)); win = git__calloc(1, sizeof(*win));
if (win == NULL)
return NULL;
win->offset = (offset / window_align) * window_align; win->offset = (offset / window_align) * window_align;
len = (size_t)(p->pack_size - win->offset); len = (size_t)(p->pack_size - win->offset);
...@@ -492,8 +495,10 @@ static unsigned char *pack_window_open( ...@@ -492,8 +495,10 @@ static unsigned char *pack_window_open(
pack_window_close_lru(backend, p, p->pack_fd) == GIT_SUCCESS) {} pack_window_close_lru(backend, p, p->pack_fd) == GIT_SUCCESS) {}
if (git_futils_mmap_ro(&win->window_map, p->pack_fd, if (git_futils_mmap_ro(&win->window_map, p->pack_fd,
win->offset, len) < GIT_SUCCESS) win->offset, len) < GIT_SUCCESS) {
free(win);
return NULL; return NULL;
}
backend->mmap_calls++; backend->mmap_calls++;
backend->open_windows++; backend->open_windows++;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment