Skip to content

Commit

Permalink
mmap_limit: introduce GIT_MMAP_LIMIT to allow testing expected mmap size
Browse files Browse the repository at this point in the history
In order to test expectations about mmap in a way similar to testing
expectations about malloc with GIT_ALLOC_LIMIT introduced by
d41489a (Add more large blob test cases, 2012-03-07), introduce a
new environment variable GIT_MMAP_LIMIT to limit the largest allowed
mmap length.

xmmap() is modified to check the size of the requested region and
fail it if it is beyond the limit.  Together with GIT_ALLOC_LIMIT
tests can now confirm expectations about memory consumption.

Signed-off-by: Steffen Prohaska <prohaska@zib.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Steffen Prohaska authored and Junio C Hamano committed Aug 28, 2014
1 parent 9927d96 commit 0271022
Showing 1 changed file with 17 additions and 1 deletion.
18 changes: 17 additions & 1 deletion sha1_file.c
Original file line number Diff line number Diff line change
Expand Up @@ -663,10 +663,26 @@ void release_pack_memory(size_t need)
; /* nothing */
}

static void mmap_limit_check(size_t length)
{
static size_t limit = 0;
if (!limit) {
limit = git_env_ulong("GIT_MMAP_LIMIT", 0);
if (!limit)
limit = SIZE_MAX;
}
if (length > limit)
die("attempting to mmap %"PRIuMAX" over limit %"PRIuMAX,
(uintmax_t)length, (uintmax_t)limit);
}

void *xmmap(void *start, size_t length,
int prot, int flags, int fd, off_t offset)
{
void *ret = mmap(start, length, prot, flags, fd, offset);
void *ret;

mmap_limit_check(length);
ret = mmap(start, length, prot, flags, fd, offset);
if (ret == MAP_FAILED) {
if (!length)
return NULL;
Expand Down

0 comments on commit 0271022

Please sign in to comment.