316 FOR_EACH_PTR(expr->args, arg) {
317 if (!get_implied_strlen(arg, &rl))
318 continue;
319 if (!is_whole_rl(rl))
320 sql_insert_caller_info(expr, STR_LEN, i, "$", show_rl(rl));
321 i++;
322 } END_FOR_EACH_PTR(arg);
323 }
324
325 static void struct_member_callback(struct expression *call, int param, char *printed_name, struct sm_state *sm)
326 {
327 if (sm->state == &merged)
328 return;
329 sql_insert_caller_info(call, STR_LEN, param, printed_name, sm->state->name);
330 }
331
332 void register_strlen(int id)
333 {
334 my_strlen_id = id;
335
336 add_unmatched_state_hook(my_strlen_id, &unmatched_strlen_state);
337
338 select_caller_info_hook(set_param_strlen, STR_LEN);
339 add_hook(&match_string_assignment, ASSIGNMENT_HOOK);
340
341 add_modification_hook(my_strlen_id, &set_strlen_undefined);
342 add_merge_hook(my_strlen_id, &merge_estates);
343 add_hook(&match_call, FUNCTION_CALL_HOOK);
344 add_member_info_callback(my_strlen_id, struct_member_callback);
345 add_hook(&match_strlen_condition, CONDITION_HOOK);
346
347 add_function_hook("snprintf", &match_snprintf, NULL);
348
349 add_function_hook("strlcpy", &match_strlcpycat, NULL);
350 add_function_hook("strlcat", &match_strlcpycat, NULL);
351 add_function_hook("strcpy", &match_strcpy, NULL);
352 }
353
354 void register_strlen_equiv(int id)
355 {
356 my_equiv_id = id;
357 add_function_assign_hook("strlen", &match_strlen, NULL);
358 add_modification_hook(my_equiv_id, &set_strlen_equiv_undefined);
359 }
360
|
316 FOR_EACH_PTR(expr->args, arg) {
317 if (!get_implied_strlen(arg, &rl))
318 continue;
319 if (!is_whole_rl(rl))
320 sql_insert_caller_info(expr, STR_LEN, i, "$", show_rl(rl));
321 i++;
322 } END_FOR_EACH_PTR(arg);
323 }
324
325 static void struct_member_callback(struct expression *call, int param, char *printed_name, struct sm_state *sm)
326 {
327 if (sm->state == &merged)
328 return;
329 sql_insert_caller_info(call, STR_LEN, param, printed_name, sm->state->name);
330 }
331
332 void register_strlen(int id)
333 {
334 my_strlen_id = id;
335
336 set_dynamic_states(my_strlen_id);
337
338 add_unmatched_state_hook(my_strlen_id, &unmatched_strlen_state);
339
340 select_caller_info_hook(set_param_strlen, STR_LEN);
341 add_hook(&match_string_assignment, ASSIGNMENT_HOOK);
342
343 add_modification_hook(my_strlen_id, &set_strlen_undefined);
344 add_merge_hook(my_strlen_id, &merge_estates);
345 add_hook(&match_call, FUNCTION_CALL_HOOK);
346 add_member_info_callback(my_strlen_id, struct_member_callback);
347 add_hook(&match_strlen_condition, CONDITION_HOOK);
348
349 add_function_hook("snprintf", &match_snprintf, NULL);
350
351 add_function_hook("strlcpy", &match_strlcpycat, NULL);
352 add_function_hook("strlcat", &match_strlcpycat, NULL);
353 add_function_hook("strcpy", &match_strcpy, NULL);
354 }
355
356 void register_strlen_equiv(int id)
357 {
358 my_equiv_id = id;
359 set_dynamic_states(my_equiv_id);
360 add_function_assign_hook("strlen", &match_strlen, NULL);
361 add_modification_hook(my_equiv_id, &set_strlen_equiv_undefined);
362 }
363
|