summaryrefslogtreecommitdiff
path: root/tree-diff.c
diff options
context:
space:
mode:
authorJeff King <peff@peff.net>2016-02-19 11:21:19 (GMT)
committerJunio C Hamano <gitster@pobox.com>2016-03-16 17:41:02 (GMT)
commit935de81289cd04b4736c538747c53df123c30d1c (patch)
treed6c559c997dffe8729af52cb2ba872ec5bd9f65b /tree-diff.c
parenta2558fb8e1e387b630312311e1d22c95663da5d0 (diff)
downloadgit-935de81289cd04b4736c538747c53df123c30d1c.zip
git-935de81289cd04b4736c538747c53df123c30d1c.tar.gz
git-935de81289cd04b4736c538747c53df123c30d1c.tar.bz2
add helpers for detecting size_t overflow
Performing computations on size_t variables that we feed to xmalloc and friends can be dangerous, as an integer overflow can cause us to allocate a much smaller chunk than we realized. We already have unsigned_add_overflows(), but let's add unsigned_mult_overflows() to that. Furthermore, rather than have each site manually check and die on overflow, we can provide some helpers that will: - promote the arguments to size_t, so that we know we are doing our computation in the same size of integer that will ultimately be fed to xmalloc - check and die on overflow - return the result so that computations can be done in the parameter list of xmalloc. These functions are a lot uglier to use than normal arithmetic operators (you have to do "st_add(foo, bar)" instead of "foo + bar"). To at least limit the damage, we also provide multi-valued versions. So rather than: st_add(st_add(a, b), st_add(c, d)); you can write: st_add4(a, b, c, d); This isn't nearly as elegant as a varargs function, but it's a lot harder to get it wrong. You don't have to remember to add a sentinel value at the end, and the compiler will complain if you get the number of arguments wrong. This patch adds only the numbered variants required to convert the current code base; we can easily add more later if needed. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'tree-diff.c')
0 files changed, 0 insertions, 0 deletions