mirror of
https://git.libssh.org/projects/libssh.git
synced 2025-12-19 00:48:43 +09:00
ci: Add cmocka.cfg to avoid false positives reports from csbuild
Based on cmocka changes: https://gitlab.com/cmocka/cmocka/-/blob/master/cppcheck/cmocka.cfg https://gitlab.com/cmocka/cmocka/-/blob/master/.gitlab-ci.yml#L148 Signed-off-by: Jakub Jelen <jjelen@redhat.com> Reviewed-by: Andreas Schneider <asn@cryptomilk.org>
This commit is contained in:
@@ -382,6 +382,7 @@ fedora/mingw32:
|
||||
stage: analysis
|
||||
variables:
|
||||
GIT_DEPTH: "100"
|
||||
CSCPPC_ADD_OPTS: "--library=./.gitlab-ci/cmocka.cfg"
|
||||
image: $CI_REGISTRY/$BUILD_IMAGES_PROJECT:$FEDORA_BUILD
|
||||
before_script:
|
||||
- |
|
||||
|
||||
475
.gitlab-ci/cmocka.cfg
Normal file
475
.gitlab-ci/cmocka.cfg
Normal file
@@ -0,0 +1,475 @@
|
||||
<?xml version="1.0"?>
|
||||
<!--
|
||||
cppcheck library configuration for cmocka
|
||||
|
||||
This file provides cppcheck with information about cmocka's assertion functions
|
||||
and their behavior, particularly that assertion failures do not return.
|
||||
|
||||
This helps cppcheck understand that after assert_non_null(ptr), the pointer
|
||||
is guaranteed to be non-NULL, eliminating false positives like:
|
||||
- nullPointerArithmeticOutOfMemory
|
||||
- nullPointer
|
||||
- etc.
|
||||
|
||||
Usage:
|
||||
cppcheck --library=cmocka.cfg [other options] <source files>
|
||||
|
||||
For more information on cppcheck library format, see:
|
||||
https://cppcheck.sourceforge.io/manual.html#library-configuration
|
||||
-->
|
||||
<def format="2">
|
||||
<!-- Core functions -->
|
||||
<function name="_fail">
|
||||
<noreturn>true</noreturn>
|
||||
<arg nr="1" direction="in">
|
||||
<not-null/>
|
||||
</arg>
|
||||
<arg nr="2" direction="in"/>
|
||||
</function>
|
||||
|
||||
<!-- Boolean assertions -->
|
||||
<function name="_assert_true">
|
||||
<arg nr="1" direction="in">
|
||||
<valid>arg1 != 0</valid>
|
||||
</arg>
|
||||
<arg nr="2" direction="in">
|
||||
<not-null/>
|
||||
</arg>
|
||||
<arg nr="3" direction="in">
|
||||
<not-null/>
|
||||
</arg>
|
||||
<arg nr="4" direction="in"/>
|
||||
</function>
|
||||
|
||||
<function name="_assert_false">
|
||||
<arg nr="1" direction="in">
|
||||
<valid>arg1 == 0</valid>
|
||||
</arg>
|
||||
<arg nr="2" direction="in">
|
||||
<not-null/>
|
||||
</arg>
|
||||
<arg nr="3" direction="in">
|
||||
<not-null/>
|
||||
</arg>
|
||||
<arg nr="4" direction="in"/>
|
||||
</function>
|
||||
|
||||
<!-- Pointer assertions -->
|
||||
<function name="_assert_ptr_equal_msg">
|
||||
<arg nr="1" direction="in">
|
||||
<valid>arg1 == arg2</valid>
|
||||
</arg>
|
||||
<arg nr="2" direction="in"/>
|
||||
<arg nr="3" direction="in">
|
||||
<not-null/>
|
||||
</arg>
|
||||
<arg nr="4" direction="in"/>
|
||||
<arg nr="5" direction="in"/>
|
||||
</function>
|
||||
|
||||
<function name="_assert_ptr_not_equal_msg">
|
||||
<arg nr="1" direction="in">
|
||||
<valid>arg1 != arg2</valid>
|
||||
</arg>
|
||||
<arg nr="2" direction="in"/>
|
||||
<arg nr="3" direction="in">
|
||||
<not-null/>
|
||||
</arg>
|
||||
<arg nr="4" direction="in"/>
|
||||
<arg nr="5" direction="in"/>
|
||||
</function>
|
||||
|
||||
<!-- Integer assertions -->
|
||||
<function name="_assert_int_equal">
|
||||
<arg nr="1" direction="in">
|
||||
<valid>arg1 == arg2</valid>
|
||||
</arg>
|
||||
<arg nr="2" direction="in"/>
|
||||
<arg nr="3" direction="in">
|
||||
<not-null/>
|
||||
</arg>
|
||||
<arg nr="4" direction="in"/>
|
||||
</function>
|
||||
|
||||
<function name="_assert_int_not_equal">
|
||||
<arg nr="1" direction="in">
|
||||
<valid>arg1 != arg2</valid>
|
||||
</arg>
|
||||
<arg nr="2" direction="in"/>
|
||||
<arg nr="3" direction="in">
|
||||
<not-null/>
|
||||
</arg>
|
||||
<arg nr="4" direction="in"/>
|
||||
</function>
|
||||
|
||||
<function name="_assert_uint_equal">
|
||||
<arg nr="1" direction="in">
|
||||
<valid>arg1 == arg2</valid>
|
||||
</arg>
|
||||
<arg nr="2" direction="in"/>
|
||||
<arg nr="3" direction="in">
|
||||
<not-null/>
|
||||
</arg>
|
||||
<arg nr="4" direction="in"/>
|
||||
</function>
|
||||
|
||||
<function name="_assert_uint_not_equal">
|
||||
<arg nr="1" direction="in">
|
||||
<valid>arg1 != arg2</valid>
|
||||
</arg>
|
||||
<arg nr="2" direction="in"/>
|
||||
<arg nr="3" direction="in">
|
||||
<not-null/>
|
||||
</arg>
|
||||
<arg nr="4" direction="in"/>
|
||||
</function>
|
||||
|
||||
<!-- Float/double assertions -->
|
||||
<function name="_assert_float_equal">
|
||||
<arg nr="1" direction="in"/>
|
||||
<arg nr="2" direction="in"/>
|
||||
<arg nr="3" direction="in"/>
|
||||
<arg nr="4" direction="in">
|
||||
<not-null/>
|
||||
</arg>
|
||||
<arg nr="5" direction="in"/>
|
||||
</function>
|
||||
|
||||
<function name="_assert_float_not_equal">
|
||||
<arg nr="1" direction="in"/>
|
||||
<arg nr="2" direction="in"/>
|
||||
<arg nr="3" direction="in"/>
|
||||
<arg nr="4" direction="in">
|
||||
<not-null/>
|
||||
</arg>
|
||||
<arg nr="5" direction="in"/>
|
||||
</function>
|
||||
|
||||
<function name="_assert_double_equal">
|
||||
<arg nr="1" direction="in"/>
|
||||
<arg nr="2" direction="in"/>
|
||||
<arg nr="3" direction="in"/>
|
||||
<arg nr="4" direction="in">
|
||||
<not-null/>
|
||||
</arg>
|
||||
<arg nr="5" direction="in"/>
|
||||
</function>
|
||||
|
||||
<function name="_assert_double_not_equal">
|
||||
<arg nr="1" direction="in"/>
|
||||
<arg nr="2" direction="in"/>
|
||||
<arg nr="3" direction="in"/>
|
||||
<arg nr="4" direction="in">
|
||||
<not-null/>
|
||||
</arg>
|
||||
<arg nr="5" direction="in"/>
|
||||
</function>
|
||||
|
||||
<!-- String assertions -->
|
||||
<function name="_assert_string_equal">
|
||||
<arg nr="1" direction="in">
|
||||
<not-null/>
|
||||
</arg>
|
||||
<arg nr="2" direction="in">
|
||||
<not-null/>
|
||||
</arg>
|
||||
<arg nr="3" direction="in">
|
||||
<not-null/>
|
||||
</arg>
|
||||
<arg nr="4" direction="in"/>
|
||||
</function>
|
||||
|
||||
<function name="_assert_string_not_equal">
|
||||
<arg nr="1" direction="in">
|
||||
<not-null/>
|
||||
</arg>
|
||||
<arg nr="2" direction="in">
|
||||
<not-null/>
|
||||
</arg>
|
||||
<arg nr="3" direction="in">
|
||||
<not-null/>
|
||||
</arg>
|
||||
<arg nr="4" direction="in"/>
|
||||
</function>
|
||||
|
||||
<!-- Memory assertions -->
|
||||
<function name="_assert_memory_equal">
|
||||
<arg nr="1" direction="in">
|
||||
<not-null/>
|
||||
</arg>
|
||||
<arg nr="2" direction="in">
|
||||
<not-null/>
|
||||
</arg>
|
||||
<arg nr="3" direction="in"/>
|
||||
<arg nr="4" direction="in">
|
||||
<not-null/>
|
||||
</arg>
|
||||
<arg nr="5" direction="in"/>
|
||||
</function>
|
||||
|
||||
<function name="_assert_memory_not_equal">
|
||||
<arg nr="1" direction="in">
|
||||
<not-null/>
|
||||
</arg>
|
||||
<arg nr="2" direction="in">
|
||||
<not-null/>
|
||||
</arg>
|
||||
<arg nr="3" direction="in"/>
|
||||
<arg nr="4" direction="in">
|
||||
<not-null/>
|
||||
</arg>
|
||||
<arg nr="5" direction="in"/>
|
||||
</function>
|
||||
|
||||
<!-- Range assertions -->
|
||||
<function name="_assert_int_in_range">
|
||||
<arg nr="1" direction="in">
|
||||
<valid>arg2 <= arg1 && arg1 <= arg3</valid>
|
||||
</arg>
|
||||
<arg nr="2" direction="in"/>
|
||||
<arg nr="3" direction="in"/>
|
||||
<arg nr="4" direction="in">
|
||||
<not-null/>
|
||||
</arg>
|
||||
<arg nr="5" direction="in"/>
|
||||
</function>
|
||||
|
||||
<function name="_assert_int_not_in_range">
|
||||
<arg nr="1" direction="in">
|
||||
<valid>arg1 < arg2 || arg3 < arg1</valid>
|
||||
</arg>
|
||||
<arg nr="2" direction="in"/>
|
||||
<arg nr="3" direction="in"/>
|
||||
<arg nr="4" direction="in">
|
||||
<not-null/>
|
||||
</arg>
|
||||
<arg nr="5" direction="in"/>
|
||||
</function>
|
||||
|
||||
<function name="_assert_uint_in_range">
|
||||
<arg nr="1" direction="in">
|
||||
<valid>arg2 <= arg1 && arg1 <= arg3</valid>
|
||||
</arg>
|
||||
<arg nr="2" direction="in"/>
|
||||
<arg nr="3" direction="in"/>
|
||||
<arg nr="4" direction="in">
|
||||
<not-null/>
|
||||
</arg>
|
||||
<arg nr="5" direction="in"/>
|
||||
</function>
|
||||
|
||||
<function name="_assert_uint_not_in_range">
|
||||
<arg nr="1" direction="in">
|
||||
<valid>arg1 < arg2 || arg3 < arg1</valid>
|
||||
</arg>
|
||||
<arg nr="2" direction="in"/>
|
||||
<arg nr="3" direction="in"/>
|
||||
<arg nr="4" direction="in">
|
||||
<not-null/>
|
||||
</arg>
|
||||
<arg nr="5" direction="in"/>
|
||||
</function>
|
||||
|
||||
<function name="_assert_float_in_range">
|
||||
<arg nr="1" direction="in"/>
|
||||
<arg nr="2" direction="in"/>
|
||||
<arg nr="3" direction="in"/>
|
||||
<arg nr="4" direction="in"/>
|
||||
<arg nr="5" direction="in">
|
||||
<not-null/>
|
||||
</arg>
|
||||
<arg nr="6" direction="in"/>
|
||||
</function>
|
||||
|
||||
<function name="_assert_float_not_in_range">
|
||||
<arg nr="1" direction="in"/>
|
||||
<arg nr="2" direction="in"/>
|
||||
<arg nr="3" direction="in"/>
|
||||
<arg nr="4" direction="in"/>
|
||||
<arg nr="5" direction="in">
|
||||
<not-null/>
|
||||
</arg>
|
||||
<arg nr="6" direction="in"/>
|
||||
</function>
|
||||
|
||||
<!-- Set assertions -->
|
||||
<function name="_assert_int_in_set">
|
||||
<arg nr="1" direction="in"/>
|
||||
<arg nr="2" direction="in">
|
||||
<not-null/>
|
||||
</arg>
|
||||
<arg nr="3" direction="in"/>
|
||||
<arg nr="4" direction="in">
|
||||
<not-null/>
|
||||
</arg>
|
||||
<arg nr="5" direction="in">
|
||||
<not-null/>
|
||||
</arg>
|
||||
<arg nr="6" direction="in"/>
|
||||
</function>
|
||||
|
||||
<function name="_assert_int_not_in_set">
|
||||
<arg nr="1" direction="in"/>
|
||||
<arg nr="2" direction="in">
|
||||
<not-null/>
|
||||
</arg>
|
||||
<arg nr="3" direction="in"/>
|
||||
<arg nr="4" direction="in">
|
||||
<not-null/>
|
||||
</arg>
|
||||
<arg nr="5" direction="in">
|
||||
<not-null/>
|
||||
</arg>
|
||||
<arg nr="6" direction="in"/>
|
||||
</function>
|
||||
|
||||
<function name="_assert_uint_in_set">
|
||||
<arg nr="1" direction="in"/>
|
||||
<arg nr="2" direction="in">
|
||||
<not-null/>
|
||||
</arg>
|
||||
<arg nr="3" direction="in"/>
|
||||
<arg nr="4" direction="in">
|
||||
<not-null/>
|
||||
</arg>
|
||||
<arg nr="5" direction="in">
|
||||
<not-null/>
|
||||
</arg>
|
||||
<arg nr="6" direction="in"/>
|
||||
</function>
|
||||
|
||||
<function name="_assert_uint_not_in_set">
|
||||
<arg nr="1" direction="in"/>
|
||||
<arg nr="2" direction="in">
|
||||
<not-null/>
|
||||
</arg>
|
||||
<arg nr="3" direction="in"/>
|
||||
<arg nr="4" direction="in">
|
||||
<not-null/>
|
||||
</arg>
|
||||
<arg nr="5" direction="in">
|
||||
<not-null/>
|
||||
</arg>
|
||||
<arg nr="6" direction="in"/>
|
||||
</function>
|
||||
|
||||
<function name="_assert_not_in_set">
|
||||
<arg nr="1" direction="in"/>
|
||||
<arg nr="2" direction="in">
|
||||
<not-null/>
|
||||
</arg>
|
||||
<arg nr="3" direction="in"/>
|
||||
<arg nr="4" direction="in">
|
||||
<not-null/>
|
||||
</arg>
|
||||
<arg nr="5" direction="in">
|
||||
<not-null/>
|
||||
</arg>
|
||||
<arg nr="6" direction="in"/>
|
||||
</function>
|
||||
|
||||
<function name="_assert_float_in_set">
|
||||
<arg nr="1" direction="in"/>
|
||||
<arg nr="2" direction="in">
|
||||
<not-null/>
|
||||
</arg>
|
||||
<arg nr="3" direction="in"/>
|
||||
<arg nr="4" direction="in"/>
|
||||
<arg nr="5" direction="in">
|
||||
<not-null/>
|
||||
</arg>
|
||||
<arg nr="6" direction="in">
|
||||
<not-null/>
|
||||
</arg>
|
||||
<arg nr="7" direction="in"/>
|
||||
</function>
|
||||
|
||||
<function name="_assert_float_not_in_set">
|
||||
<arg nr="1" direction="in"/>
|
||||
<arg nr="2" direction="in">
|
||||
<not-null/>
|
||||
</arg>
|
||||
<arg nr="3" direction="in"/>
|
||||
<arg nr="4" direction="in"/>
|
||||
<arg nr="5" direction="in">
|
||||
<not-null/>
|
||||
</arg>
|
||||
<arg nr="6" direction="in">
|
||||
<not-null/>
|
||||
</arg>
|
||||
<arg nr="7" direction="in"/>
|
||||
</function>
|
||||
|
||||
<!-- Return code assertion -->
|
||||
<function name="_assert_return_code">
|
||||
<arg nr="1" direction="in">
|
||||
<valid>0 <= arg1</valid>
|
||||
</arg>
|
||||
<arg nr="2" direction="in"/>
|
||||
<arg nr="3" direction="in">
|
||||
<not-null/>
|
||||
</arg>
|
||||
<arg nr="4" direction="in">
|
||||
<not-null/>
|
||||
</arg>
|
||||
<arg nr="5" direction="in"/>
|
||||
</function>
|
||||
|
||||
<!-- Macro definitions -->
|
||||
<!-- Boolean macros -->
|
||||
<define name="assert_true(c)" value="_assert_true(cast_to_uintmax_type(c), #c, __FILE__, __LINE__)"/>
|
||||
<define name="assert_false(c)" value="_assert_false(cast_to_uintmax_type(c), #c, __FILE__, __LINE__)"/>
|
||||
|
||||
<!-- Pointer macros -->
|
||||
<define name="assert_non_null(c)" value="assert_ptr_not_equal((c), NULL)"/>
|
||||
<define name="assert_non_null_msg(c, msg)" value="assert_ptr_not_equal_msg((c), NULL, (msg))"/>
|
||||
<define name="assert_null(c)" value="assert_ptr_equal((c), NULL)"/>
|
||||
<define name="assert_null_msg(c, msg)" value="assert_ptr_equal_msg((c), NULL, (msg))"/>
|
||||
<define name="assert_ptr_equal(a, b)" value="assert_ptr_equal_msg((a), (b), NULL)"/>
|
||||
<define name="assert_ptr_equal_msg(a, b, msg)" value="_assert_ptr_equal_msg((const void*)(a), (const void*)(b), __FILE__, __LINE__, (msg))"/>
|
||||
<define name="assert_ptr_not_equal(a, b)" value="_assert_ptr_not_equal_msg((const void*)(a), (const void*)(b), __FILE__, __LINE__, NULL)"/>
|
||||
<define name="assert_ptr_not_equal_msg(a, b, msg)" value="_assert_ptr_not_equal_msg((const void*)(a), (const void*)(b), __FILE__, __LINE__, (msg))"/>
|
||||
|
||||
<!-- Integer macros -->
|
||||
<define name="assert_int_equal(a, b)" value="_assert_int_equal(cast_to_intmax_type(a), cast_to_intmax_type(b), __FILE__, __LINE__)"/>
|
||||
<define name="assert_int_not_equal(a, b)" value="_assert_int_not_equal(cast_to_intmax_type(a), cast_to_intmax_type(b), __FILE__, __LINE__)"/>
|
||||
<define name="assert_uint_equal(a, b)" value="_assert_uint_equal(cast_to_uintmax_type(a), cast_to_uintmax_type(b), __FILE__, __LINE__)"/>
|
||||
<define name="assert_uint_not_equal(a, b)" value="_assert_uint_not_equal(cast_to_uintmax_type(a), cast_to_uintmax_type(b), __FILE__, __LINE__)"/>
|
||||
|
||||
<!-- Float/double macros -->
|
||||
<define name="assert_float_equal(a, b, epsilon)" value="_assert_float_equal((float)(a), (float)(b), (float)(epsilon), __FILE__, __LINE__)"/>
|
||||
<define name="assert_float_not_equal(a, b, epsilon)" value="_assert_float_not_equal((float)(a), (float)(b), (float)(epsilon), __FILE__, __LINE__)"/>
|
||||
<define name="assert_double_equal(a, b, epsilon)" value="_assert_double_equal((double)(a), (double)(b), (double)(epsilon), __FILE__, __LINE__)"/>
|
||||
<define name="assert_double_not_equal(a, b, epsilon)" value="_assert_double_not_equal((double)(a), (double)(b), (double)(epsilon), __FILE__, __LINE__)"/>
|
||||
|
||||
<!-- String macros -->
|
||||
<define name="assert_string_equal(a, b)" value="_assert_string_equal((const char*)(a), (const char*)(b), __FILE__, __LINE__)"/>
|
||||
<define name="assert_string_not_equal(a, b)" value="_assert_string_not_equal((const char*)(a), (const char*)(b), __FILE__, __LINE__)"/>
|
||||
|
||||
<!-- Memory macros -->
|
||||
<define name="assert_memory_equal(a, b, size)" value="_assert_memory_equal((const void*)(a), (const void*)(b), size, __FILE__, __LINE__)"/>
|
||||
<define name="assert_memory_not_equal(a, b, size)" value="_assert_memory_not_equal((const void*)(a), (const void*)(b), size, __FILE__, __LINE__)"/>
|
||||
|
||||
<!-- Range macros -->
|
||||
<define name="assert_int_in_range(value, minimum, maximum)" value="_assert_int_in_range(cast_to_intmax_type(value), cast_to_intmax_type(minimum), cast_to_intmax_type(maximum), __FILE__, __LINE__)"/>
|
||||
<define name="assert_int_not_in_range(value, minimum, maximum)" value="_assert_int_not_in_range(cast_to_intmax_type(value), cast_to_intmax_type(minimum), cast_to_intmax_type(maximum), __FILE__, __LINE__)"/>
|
||||
<define name="assert_uint_in_range(value, minimum, maximum)" value="_assert_uint_in_range(cast_to_uintmax_type(value), cast_to_uintmax_type(minimum), cast_to_uintmax_type(maximum), __FILE__, __LINE__)"/>
|
||||
<define name="assert_uint_not_in_range(value, minimum, maximum)" value="_assert_uint_not_in_range(cast_to_uintmax_type(value), cast_to_uintmax_type(minimum), cast_to_uintmax_type(maximum), __FILE__, __LINE__)"/>
|
||||
<define name="assert_in_range(value, minimum, maximum)" value="assert_uint_in_range(value, minimum, maximum)"/>
|
||||
<define name="assert_not_in_range(value, minimum, maximum)" value="assert_uint_not_in_range(value, minimum, maximum)"/>
|
||||
<define name="assert_float_in_range(value, minimum, maximum, epsilon)" value="_assert_float_in_range((double)(value), (double)(minimum), (double)(maximum), (double)(epsilon), __FILE__, __LINE__)"/>
|
||||
<define name="assert_float_not_in_range(value, minimum, maximum, epsilon)" value="_assert_float_not_in_range((double)(value), (double)(minimum), (double)(maximum), (double)(epsilon), __FILE__, __LINE__)"/>
|
||||
|
||||
<!-- Set macros -->
|
||||
<define name="assert_in_set(value, values, number_of_values)" value="_assert_not_in_set(cast_to_uintmax_type(value), (uintmax_t*)(values), number_of_values, __FILE__, __LINE__, 0)"/>
|
||||
<define name="assert_not_in_set(value, values, number_of_values)" value="_assert_not_in_set(cast_to_uintmax_type(value), (uintmax_t*)(values), number_of_values, __FILE__, __LINE__, 1)"/>
|
||||
<define name="assert_int_in_set(value, values, number_of_values)" value="_assert_int_in_set(cast_to_intmax_type(value), (intmax_t*)(values), number_of_values, __FILE__, __LINE__, 0)"/>
|
||||
<define name="assert_int_not_in_set(value, values, number_of_values)" value="_assert_int_not_in_set(cast_to_intmax_type(value), (intmax_t*)(values), number_of_values, __FILE__, __LINE__, 1)"/>
|
||||
<define name="assert_uint_in_set(value, values, number_of_values)" value="_assert_uint_in_set(cast_to_uintmax_type(value), (uintmax_t*)(values), number_of_values, __FILE__, __LINE__, 0)"/>
|
||||
<define name="assert_uint_not_in_set(value, values, number_of_values)" value="_assert_uint_not_in_set(cast_to_uintmax_type(value), (uintmax_t*)(values), number_of_values, __FILE__, __LINE__, 1)"/>
|
||||
<define name="assert_float_in_set(value, values, number_of_values, epsilon)" value="_assert_float_in_set((double)(value), (double*)(values), number_of_values, (double)(epsilon), __FILE__, __LINE__, 0)"/>
|
||||
<define name="assert_float_not_in_set(value, values, number_of_values, epsilon)" value="_assert_float_not_in_set((double)(value), (double*)(values), number_of_values, (double)(epsilon), __FILE__, __LINE__, 1)"/>
|
||||
|
||||
<!-- Return code macro -->
|
||||
<define name="assert_return_code(rc, error)" value="_assert_return_code(cast_to_intmax_type(rc), (int32_t)(error), #rc, __FILE__, __LINE__)"/>
|
||||
</def>
|
||||
Reference in New Issue
Block a user