From: Dan Carpenter Date: Thu, 19 Jun 2014 06:52:22 +0000 (+0300) Subject: param_cleared: handle direct assignments X-Git-Tag: 1.60~231 X-Git-Url: https://repo.or.cz/w/smatch.git/commitdiff_plain/92557a5f4003c93606905482a61c0f651df5e168 param_cleared: handle direct assignments If you assign a struct that means it's members are cleared out. Signed-off-by: Dan Carpenter --- diff --git a/smatch_param_cleared.c b/smatch_param_cleared.c index 65f060eb..69bc6bb4 100644 --- a/smatch_param_cleared.c +++ b/smatch_param_cleared.c @@ -139,6 +139,16 @@ static void match_usb_control_msg(const char *fn, struct expression *expr, void db_param_cleared(expr, 6, (char *)"$$", (char *)""); } +static void match_assign(struct expression *expr) +{ + struct symbol *type; + + type = get_type(expr->left); + if (!type || type->type != SYM_STRUCT) + return; + set_state_expr(my_id, expr->left, &cleared); +} + void register_param_cleared(int id) { my_id = id; @@ -154,6 +164,8 @@ void register_param_cleared(int id) add_function_hook("sprintf", &match_memcpy, INT_PTR(0)); add_function_hook("snprintf", &match_memcpy, INT_PTR(0)); + add_hook(&match_assign, ASSIGNMENT_HOOK); + register_clears_param(); select_return_states_hook(PARAM_CLEARED, &db_param_cleared);