Merge branch 'maint-2.4' into maint-2.5
* maint-2.4: Git 2.4.11 list-objects: pass full pathname to callbacks list-objects: drop name_path entirely list-objects: convert name_path to a strbuf show_object_with_name: simplify by using path_name() http-push: stop using name_path tree-diff: catch integer overflow in combine_diff_path allocation add helpers for detecting size_t overflow
This commit is contained in:
@ -96,6 +96,14 @@
|
||||
#define unsigned_add_overflows(a, b) \
|
||||
((b) > maximum_unsigned_value_of_type(a) - (a))
|
||||
|
||||
/*
|
||||
* Returns true if the multiplication of "a" and "b" will
|
||||
* overflow. The types of "a" and "b" must match and must be unsigned.
|
||||
* Note that this macro evaluates "a" twice!
|
||||
*/
|
||||
#define unsigned_mult_overflows(a, b) \
|
||||
((a) && (b) > maximum_unsigned_value_of_type(a) / (a))
|
||||
|
||||
#ifdef __GNUC__
|
||||
#define TYPEOF(x) (__typeof__(x))
|
||||
#else
|
||||
@ -699,6 +707,32 @@ extern void release_pack_memory(size_t);
|
||||
typedef void (*try_to_free_t)(size_t);
|
||||
extern try_to_free_t set_try_to_free_routine(try_to_free_t);
|
||||
|
||||
static inline size_t st_add(size_t a, size_t b)
|
||||
{
|
||||
if (unsigned_add_overflows(a, b))
|
||||
die("size_t overflow: %"PRIuMAX" + %"PRIuMAX,
|
||||
(uintmax_t)a, (uintmax_t)b);
|
||||
return a + b;
|
||||
}
|
||||
#define st_add3(a,b,c) st_add((a),st_add((b),(c)))
|
||||
#define st_add4(a,b,c,d) st_add((a),st_add3((b),(c),(d)))
|
||||
|
||||
static inline size_t st_mult(size_t a, size_t b)
|
||||
{
|
||||
if (unsigned_mult_overflows(a, b))
|
||||
die("size_t overflow: %"PRIuMAX" * %"PRIuMAX,
|
||||
(uintmax_t)a, (uintmax_t)b);
|
||||
return a * b;
|
||||
}
|
||||
|
||||
static inline size_t st_sub(size_t a, size_t b)
|
||||
{
|
||||
if (a < b)
|
||||
die("size_t underflow: %"PRIuMAX" - %"PRIuMAX,
|
||||
(uintmax_t)a, (uintmax_t)b);
|
||||
return a - b;
|
||||
}
|
||||
|
||||
#ifdef HAVE_ALLOCA_H
|
||||
# include <alloca.h>
|
||||
# define xalloca(size) (alloca(size))
|
||||
|
||||
Reference in New Issue
Block a user