From b021ddceeca9e2dff891ee482e349878e3355b31 Mon Sep 17 00:00:00 2001 From: Dan Carpenter Date: Fri, 14 Sep 2012 15:35:27 +0300 Subject: [PATCH] buf_size: merging two same size buffers give a same size buffer There a lot of functions which are always called with the same size buffer. In the original code, we would merge them together giving an &undefined state. Signed-off-by: Dan Carpenter --- smatch_buf_size.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/smatch_buf_size.c b/smatch_buf_size.c index 90d764d3..89351d60 100644 --- a/smatch_buf_size.c +++ b/smatch_buf_size.c @@ -37,6 +37,13 @@ static void set_undefined(struct sm_state *sm) set_state(sm->owner, sm->name, sm->sym, &undefined); } +static struct smatch_state *merge_func(struct smatch_state *s1, struct smatch_state *s2) +{ + if (PTR_INT(s1->data) == PTR_INT(s2->data)) + return s1; + return &undefined; +} + void set_param_buf_size(const char *name, struct symbol *sym, char *key, char *value) { char fullname[256]; @@ -612,12 +619,15 @@ void register_buf_size(int id) add_hook(&match_func_end, END_FUNC_HOOK); add_modification_hook(my_size_id, &set_undefined); + + add_merge_hook(my_size_id, &merge_func); } void register_strlen(int id) { my_strlen_id = id; add_modification_hook(my_strlen_id, &set_undefined); + add_merge_hook(my_strlen_id, &merge_func); } void register_buf_size_late(int id) -- 2.11.4.GIT