Print this page
11972 resync smatch

*** 186,197 **** --- 186,224 ---- } update_cache(name, is_file_local(array), rl); } + static void mark_strings_unknown(const char *fn, struct expression *expr, void *_arg) + { + struct expression *dest; + struct symbol *type; + int arg = PTR_INT(_arg); + char *name; + + dest = get_argument_from_call_expr(expr->args, arg); + if (!dest) + return; + name = get_array_name(dest); + if (!name) + return; + type = get_type(dest); + if (type_is_ptr(type)) + type = get_real_base_type(type); + update_cache(name, is_file_local(dest), alloc_whole_rl(type)); + } + void register_array_values(int id) { my_id = id; add_hook(&match_assign, ASSIGNMENT_HOOK); add_hook(&match_assign, GLOBAL_ASSIGNMENT_HOOK); + + add_function_hook("sprintf", &mark_strings_unknown, INT_PTR(0)); + add_function_hook("snprintf", &mark_strings_unknown, INT_PTR(0)); + + add_function_hook("strcpy", &mark_strings_unknown, INT_PTR(0)); + add_function_hook("strncpy", &mark_strings_unknown, INT_PTR(0)); + add_function_hook("strlcpy", &mark_strings_unknown, INT_PTR(0)); + add_function_hook("strscpy", &mark_strings_unknown, INT_PTR(0)); }