From 745d624489c0a63b2113cc5dd4aac9d526763398 Mon Sep 17 00:00:00 2001 From: Dan Carpenter Date: Wed, 5 Aug 2015 01:37:56 +0300 Subject: [PATCH] deref_check, check_deref: only consider pointers We were considering everything checked against zero instead of only pointers. This has two bad effects. 1) We use more memory. 2) If the database is out of sync and it thinks we dereference a non-pointer that was previously compared to zero then there can be some confusing false positives. Signed-off-by: Dan Carpenter --- check_check_deref.c | 3 +++ check_deref_check.c | 3 +++ 2 files changed, 6 insertions(+) diff --git a/check_check_deref.c b/check_check_deref.c index 385dfe37..c650bd4e 100644 --- a/check_check_deref.c +++ b/check_check_deref.c @@ -134,6 +134,9 @@ static void match_condition(struct expression *expr) if (get_macro_name(expr->pos)) return; + if (!is_pointer(expr)) + return; + if (expr->type == EXPR_ASSIGNMENT) { match_condition(expr->right); match_condition(expr->left); diff --git a/check_deref_check.c b/check_deref_check.c index 23cd303a..fa54c9a3 100644 --- a/check_deref_check.c +++ b/check_deref_check.c @@ -70,6 +70,9 @@ static void match_condition(struct expression *expr) if (get_macro_name(expr->pos)) return; + if (!is_pointer(expr)) + return; + sm = get_sm_state_expr(my_id, expr); if (!sm || sm->state != &derefed) return; -- 2.11.4.GIT