From: Christian Hopps Date: Sun, 7 Jan 2024 09:41:32 +0000 (+0000) Subject: lib: fix clang SA warnings X-Git-Tag: base_10.0~137^2~3 X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=00138ffb47acc58a49e93a9b291a4b9e0c92096e;p=matthieu%2Ffrr.git lib: fix clang SA warnings Signed-off-by: Christian Hopps --- diff --git a/lib/darr.h b/lib/darr.h index 2b6f0db0b9..df8ace62dd 100644 --- a/lib/darr.h +++ b/lib/darr.h @@ -77,6 +77,7 @@ */ #include +#include #include "memory.h" DECLARE_MTYPE(DARR); @@ -249,6 +250,10 @@ void *__darr_resize(void *a, uint count, size_t esize, struct memtype *mt); * pointers into the previous memory block are no longer valid. The `A` value * is guaranteed not to change if there is sufficient capacity in the array. * + * The exception to the no-change rule is if @C is passed as 0, it will be + * considered 1 so that an array is always allocated if currently NULL, + * i.e., @A will never be NULL after a call to darr_ensure_cap_mt() + * * Args: * A: (IN/OUT) the dynamic array, can be NULL. * C: Total capacity to guarantee. @@ -259,8 +264,9 @@ void *__darr_resize(void *a, uint count, size_t esize, struct memtype *mt); #define darr_ensure_cap_mt(A, C, MT) \ ({ \ /* Cast to avoid warning when C == 0 */ \ - if ((ssize_t)darr_cap(A) < (ssize_t)(C)) \ - _darr_resize_mt((A), (C), MT); \ + uint _c = (C) > 0 ? (C) : 1; \ + if ((size_t)darr_cap(A) < _c) \ + _darr_resize_mt((A), _c, MT); \ (A); \ }) #define darr_ensure_cap(A, C) darr_ensure_cap_mt(A, C, MTYPE_DARR) @@ -285,11 +291,14 @@ void *__darr_resize(void *a, uint count, size_t esize, struct memtype *mt); */ #define darr_ensure_i_mt(A, I, MT) \ ({ \ - if ((int)(I) > darr_maxi(A)) \ - _darr_resize_mt((A), (I) + 1, MT); \ - if ((I) + 1 > _darr_len(A)) \ - _darr_len(A) = (I) + 1; \ - &(A)[I]; \ + assert((int)(I) >= 0 && (int)(I) <= INT_MAX); \ + int _i = (int)(I); \ + if (_i > darr_maxi(A)) \ + _darr_resize_mt((A), _i + 1, MT); \ + assert((A) != NULL); \ + if ((uint)_i + 1 > _darr_len(A)) \ + _darr_len(A) = _i + 1; \ + &(A)[_i]; \ }) #define darr_ensure_i(A, I) darr_ensure_i_mt(A, I, MTYPE_DARR) diff --git a/lib/northbound_oper.c b/lib/northbound_oper.c index 334370d0ab..bd6d870ebc 100644 --- a/lib/northbound_oper.c +++ b/lib/northbound_oper.c @@ -806,6 +806,13 @@ static const struct lysc_node *nb_op_sib_first(struct nb_op_yield_state *ys, const struct lysc_node *sib = lysc_node_child(parent); const struct lysc_node *first_sib; + /* + * NOTE: when we want to handle root level walks we will need to use + * lys_getnext() to walk root level of each module and + * ly_ctx_get_module_iter() to walk the modules. + */ + assert(darr_len(ys->node_infos) > 0); + /* * The top of the node stack points at @parent. * @@ -814,7 +821,7 @@ static const struct lysc_node *nb_op_sib_first(struct nb_op_yield_state *ys, * base of the user query, return the next schema node from the query * string (schema_path). */ - assert(darr_last(ys->node_infos)->schema == parent); + assert(darr_last(ys->node_infos) != NULL && darr_last(ys->node_infos)->schema == parent); if (darr_lasti(ys->node_infos) < ys->query_base_level) return ys->schema_path[darr_lasti(ys->node_infos) + 1]; @@ -1010,10 +1017,14 @@ static enum nb_error __walk(struct nb_op_yield_state *ys, bool is_resume) * should be kept. */ ret = nb_op_iter_leaf(ys, nn, xpath_child); + if (ret != NB_OK) + goto done; sib = nb_op_sib_next(ys, sib); continue; case LYS_LEAFLIST: ret = nb_op_iter_leaflist(ys, nn, xpath_child); + if (ret != NB_OK) + goto done; sib = nb_op_sib_next(ys, sib); continue; case LYS_CONTAINER: diff --git a/mgmtd/mgmt_fe_adapter.c b/mgmtd/mgmt_fe_adapter.c index d98444703f..5f17b89c5c 100644 --- a/mgmtd/mgmt_fe_adapter.c +++ b/mgmtd/mgmt_fe_adapter.c @@ -1105,7 +1105,7 @@ static int fe_adapter_send_tree_data(struct mgmt_fe_session_ctx *session, LYD_PRINT_WITHSIBLINGS)); /* buf may have been reallocated and moved */ msg = (typeof(msg))buf; - + (void)msg; /* suppress clang-SA unused warning on safety code */ if (ret != LY_SUCCESS) { MGMTD_FE_ADAPTER_ERR("Error building get-tree result for client %s session-id %" PRIu64