From: Martin Koegler <martin.koegler@xxxxxxxxx> Signed-off-by: Martin Koegler <martin.koegler@xxxxxxxxx> --- builtin/pack-objects.c | 6 +++--- config.c | 27 ++++++++++++++++++++++----- config.h | 1 + 3 files changed, 26 insertions(+), 8 deletions(-) diff --git a/builtin/pack-objects.c b/builtin/pack-objects.c index f8db283..0086da7 100644 --- a/builtin/pack-objects.c +++ b/builtin/pack-objects.c @@ -2450,7 +2450,7 @@ static int git_pack_config(const char *k, const char *v, void *cb) return 0; } if (!strcmp(k, "pack.windowmemory")) { - window_memory_limit = git_config_ulong(k, v); + window_memory_limit = git_config_size_t(k, v); return 0; } if (!strcmp(k, "pack.depth")) { @@ -2458,11 +2458,11 @@ static int git_pack_config(const char *k, const char *v, void *cb) return 0; } if (!strcmp(k, "pack.deltacachesize")) { - max_delta_cache_size = git_config_int(k, v); + max_delta_cache_size = git_config_size_t(k, v); return 0; } if (!strcmp(k, "pack.deltacachelimit")) { - cache_max_small_delta_size = git_config_int(k, v); + cache_max_small_delta_size = git_config_size_t(k, v); return 0; } if (!strcmp(k, "pack.writebitmaphashcache")) { diff --git a/config.c b/config.c index 831cf8b..444b1d1 100644 --- a/config.c +++ b/config.c @@ -863,6 +863,15 @@ static int git_parse_ssize_t(const char *value, ssize_t *ret) return 1; } +static int git_parse_size_t(const char *value, size_t *ret) +{ + uintmax_t tmp; + if (!git_parse_unsigned(value, &tmp, maximum_signed_value_of_type(size_t))) + return 0; + *ret = tmp; + return 1; +} + NORETURN static void die_bad_number(const char *name, const char *value) { @@ -929,6 +938,14 @@ ssize_t git_config_ssize_t(const char *name, const char *value) return ret; } +size_t git_config_size_t(const char *name, const char *value) +{ + size_t ret; + if (!git_parse_size_t(value, &ret)) + die_bad_number(name, value); + return ret; +} + int git_parse_maybe_bool(const char *value) { if (!value) @@ -1105,7 +1122,7 @@ static int git_default_core_config(const char *var, const char *value) if (!strcmp(var, "core.packedgitwindowsize")) { int pgsz_x2 = getpagesize() * 2; - packed_git_window_size = git_config_ulong(var, value); + packed_git_window_size = git_config_size_t(var, value); /* This value must be multiple of (pagesize * 2) */ packed_git_window_size /= pgsz_x2; @@ -1116,17 +1133,17 @@ static int git_default_core_config(const char *var, const char *value) } if (!strcmp(var, "core.bigfilethreshold")) { - big_file_threshold = git_config_ulong(var, value); + big_file_threshold = git_config_size_t(var, value); return 0; } if (!strcmp(var, "core.packedgitlimit")) { - packed_git_limit = git_config_ulong(var, value); + packed_git_limit = git_config_size_t(var, value); return 0; } if (!strcmp(var, "core.deltabasecachelimit")) { - delta_base_cache_limit = git_config_ulong(var, value); + delta_base_cache_limit = git_config_size_t(var, value); return 0; } @@ -1360,7 +1377,7 @@ int git_default_config(const char *var, const char *value, void *dummy) } if (!strcmp(var, "pack.packsizelimit")) { - pack_size_limit_cfg = git_config_ulong(var, value); + pack_size_limit_cfg = git_config_size_t(var, value); return 0; } diff --git a/config.h b/config.h index fb76729..c264ee8 100644 --- a/config.h +++ b/config.h @@ -54,6 +54,7 @@ extern int git_config_int(const char *, const char *); extern int64_t git_config_int64(const char *, const char *); extern unsigned long git_config_ulong(const char *, const char *); extern ssize_t git_config_ssize_t(const char *, const char *); +extern size_t git_config_size_t(const char *, const char *); extern int git_config_bool_or_int(const char *, const char *, int *); extern int git_config_bool(const char *, const char *); extern int git_config_maybe_bool(const char *, const char *); -- 2.1.4