I ran the new version of scan-build and checked the SSSD. There's a big number of false positives, anything that follows this construct:
struct foostruct *f = NULL; get_foo_vals(mem_ctxm &f); process(f->foomember); Triggers a warning that f->foomember is dereferencing NULL. That said, clang also uncovered some real bugs. Attached are fixes for bugs that are obvious, I will follow up with some others with people who have more knowledge about the code in question.
>From 5b3d7871c57978c79a44a0047f0008e83c2fd8bb Mon Sep 17 00:00:00 2001 From: Jakub Hrozek <[email protected]> Date: Mon, 10 Dec 2012 03:08:15 +0100 Subject: [PATCH 1/3] PAC: check the return value of diff_git_lists --- src/responder/pac/pacsrv_cmd.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/responder/pac/pacsrv_cmd.c b/src/responder/pac/pacsrv_cmd.c index 6b6a7a9834b1270ddd59f67346425cdb820b89d8..277cf4b120f9fc7ac44bc880743d9fa33d400dc3 100644 --- a/src/responder/pac/pacsrv_cmd.c +++ b/src/responder/pac/pacsrv_cmd.c @@ -245,6 +245,10 @@ static errno_t pac_add_user_next(struct pac_req_ctx *pr_ctx) pr_ctx->gid_count, pr_ctx->gids, &pr_ctx->add_gid_count, &pr_ctx->add_gids, &pr_ctx->del_grp_count, &pr_ctx->del_grp_list); + if (ret != EOK) { + DEBUG(SSSDBG_OP_FAILURE, ("diff_gid_lists failed.\n")); + goto done; + } req = pac_save_memberships_send(pr_ctx); if (req == NULL) { -- 1.8.0.1
>From cfaa9627424a4135a7bb81da70cfe017a15a3d82 Mon Sep 17 00:00:00 2001 From: Jakub Hrozek <[email protected]> Date: Mon, 10 Dec 2012 03:11:59 +0100 Subject: [PATCH 2/3] SYSDB: Move misplaced assignment --- src/db/sysdb_ops.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/db/sysdb_ops.c b/src/db/sysdb_ops.c index 80a323b12901b40f6df0c4cd0f0b23b4cf2cf2b2..4bbc76c5c39501a4d878a1d41faa81919a23228f 100644 --- a/src/db/sysdb_ops.c +++ b/src/db/sysdb_ops.c @@ -3153,8 +3153,6 @@ errno_t sysdb_remove_attrs(struct sysdb_ctx *sysdb, ldb_msg_remove_attr(msg, remove_attrs[i]); } - ret = EOK; - ret = sysdb_transaction_commit(sysdb); if (ret != EOK) { DEBUG(SSSDBG_CRIT_FAILURE, ("Failed to commit transaction\n")); @@ -3163,6 +3161,7 @@ errno_t sysdb_remove_attrs(struct sysdb_ctx *sysdb, in_transaction = false; + ret = EOK; done: if (in_transaction) { sret = sysdb_transaction_cancel(sysdb); -- 1.8.0.1
>From 895c7023f621e654b2a50dbfb550b0c23baf5d7d Mon Sep 17 00:00:00 2001 From: Jakub Hrozek <[email protected]> Date: Mon, 10 Dec 2012 03:13:39 +0100 Subject: [PATCH 3/3] LDAP: remove dead assignment --- src/providers/ldap/sdap_async_initgroups.c | 1 - 1 file changed, 1 deletion(-) diff --git a/src/providers/ldap/sdap_async_initgroups.c b/src/providers/ldap/sdap_async_initgroups.c index 029096dac06a32dc4942a0daeaff6014f7c2af40..66be76e664f5ff94706f7c0631f16c2484868544 100644 --- a/src/providers/ldap/sdap_async_initgroups.c +++ b/src/providers/ldap/sdap_async_initgroups.c @@ -1826,7 +1826,6 @@ save_rfc2307bis_group_memberships(struct sdap_initgr_rfc2307bis_state *state) } in_transaction = true; - iter_tmp = membership_state->memberships; iter_start = membership_state->memberships; DLIST_FOR_EACH(iter, membership_state->memberships) { -- 1.8.0.1
_______________________________________________ sssd-devel mailing list [email protected] https://lists.fedorahosted.org/mailman/listinfo/sssd-devel
