mirror of
https://git.proxmox.com/git/libgit2
synced 2025-05-04 05:13:50 +00:00

Coverity does not comprehend the connection between a vector's size and the contents pointer, that is that the vector's pointer is non-NULL when its size is positive. As the vector code should be reasonably well tested and users are expected to not manually modify a vector's contents it seems save to assume that the macros will never dereference a NULL pointer. Fix Coverity warnings by overriding the foreach macros with macros that explicitly aborting when (v)->contents is NULL.
34 lines
1.4 KiB
C
34 lines
1.4 KiB
C
/*
|
|
* Copyright (C) the libgit2 contributors. All rights reserved.
|
|
*
|
|
* This file is part of libgit2, distributed under the GNU GPL v2 with
|
|
* a Linking Exception. For full terms see the included COPYING file.
|
|
*/
|
|
|
|
#nodef GITERR_CHECK_ALLOC(ptr) if (ptr == NULL) { __coverity_panic__(); }
|
|
|
|
#nodef GITERR_CHECK_ALLOC_ADD(out, one, two) \
|
|
if (GIT_ADD_SIZET_OVERFLOW(out, one, two)) { __coverity_panic__(); }
|
|
|
|
#nodef GITERR_CHECK_ALLOC_ADD3(out, one, two, three) \
|
|
if (GIT_ADD_SIZET_OVERFLOW(out, one, two) || \
|
|
GIT_ADD_SIZET_OVERFLOW(out, *(out), three)) { __coverity_panic__(); }
|
|
|
|
#nodef GITERR_CHECK_ALLOC_ADD4(out, one, two, three, four) \
|
|
if (GIT_ADD_SIZET_OVERFLOW(out, one, two) || \
|
|
GIT_ADD_SIZET_OVERFLOW(out, *(out), three) || \
|
|
GIT_ADD_SIZET_OVERFLOW(out, *(out), four)) { __coverity_panic__(); }
|
|
|
|
#nodef GITERR_CHECK_ALLOC_MULTIPLY(out, nelem, elsize) \
|
|
if (GIT_MULTIPLY_SIZET_OVERFLOW(out, nelem, elsize)) { __coverity_panic__(); }
|
|
|
|
#nodef GITERR_CHECK_VERSION(S,V,N) if (giterr__check_version(S,V,N) < 0) { __coverity_panic__(); }
|
|
|
|
#nodef LOOKS_LIKE_DRIVE_PREFIX(S) (strlen(S) >= 2 && git__isalpha((S)[0]) && (S)[1] == ':')
|
|
|
|
#nodef git_vector_foreach(v, iter, elem) \
|
|
for ((iter) = 0; (v)->contents != NULL && (iter) < (v)->length && ((elem) = (v)->contents[(iter)], 1); (iter)++ )
|
|
|
|
#nodef git_vector_rforeach(v, iter, elem) \
|
|
for ((iter) = (v)->length - 1; (v)->contents != NULL && (iter) < SIZE_MAX && ((elem) = (v)->contents[(iter)], 1); (iter)-- )
|