Skip to content

Commit 023ab20

Browse files
fix bug where mock did not ensure zero args case
1 parent 40929d0 commit 023ab20

File tree

1 file changed

+29
-25
lines changed

1 file changed

+29
-25
lines changed

code/logic/mock.c

Lines changed: 29 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ void fossil_mock_destroy(fossil_mock_calllist_t *list) {
5353
}
5454

5555
void fossil_mock_add_call(fossil_mock_calllist_t *list, const char *function_name, fossil_mock_pizza_t *arguments, int num_args) {
56-
if (!list || !function_name || !arguments) {
56+
if (!list || !function_name || (!arguments && num_args > 0)) {
5757
return;
5858
}
5959

@@ -68,34 +68,38 @@ void fossil_mock_add_call(fossil_mock_calllist_t *list, const char *function_nam
6868
return;
6969
}
7070

71-
call->arguments = (fossil_mock_pizza_t *)pizza_sys_memory_alloc(num_args * sizeof(fossil_mock_pizza_t));
72-
if (!call->arguments) {
73-
pizza_sys_memory_free(call->function_name);
74-
pizza_sys_memory_free(call);
75-
return;
76-
}
77-
78-
for (int i = 0; i < num_args; ++i) {
79-
call->arguments[i].type = arguments[i].type;
80-
call->arguments[i].value.data = pizza_io_cstr_dup(arguments[i].value.data);
81-
call->arguments[i].value.mutable_flag = arguments[i].value.mutable_flag;
82-
call->arguments[i].attribute.name = pizza_io_cstr_dup(arguments[i].attribute.name);
83-
call->arguments[i].attribute.description = pizza_io_cstr_dup(arguments[i].attribute.description);
84-
call->arguments[i].attribute.id = pizza_io_cstr_dup(arguments[i].attribute.id);
85-
86-
if (!call->arguments[i].value.data || !call->arguments[i].attribute.name ||
87-
!call->arguments[i].attribute.description || !call->arguments[i].attribute.id) {
88-
for (int j = 0; j <= i; ++j) {
89-
pizza_sys_memory_free(call->arguments[j].value.data);
90-
pizza_sys_memory_free(call->arguments[j].attribute.name);
91-
pizza_sys_memory_free(call->arguments[j].attribute.description);
92-
pizza_sys_memory_free(call->arguments[j].attribute.id);
93-
}
94-
pizza_sys_memory_free(call->arguments);
71+
if (num_args > 0) {
72+
call->arguments = (fossil_mock_pizza_t *)pizza_sys_memory_alloc(num_args * sizeof(fossil_mock_pizza_t));
73+
if (!call->arguments) {
9574
pizza_sys_memory_free(call->function_name);
9675
pizza_sys_memory_free(call);
9776
return;
9877
}
78+
79+
for (int i = 0; i < num_args; ++i) {
80+
call->arguments[i].type = arguments[i].type;
81+
call->arguments[i].value.data = pizza_io_cstr_dup(arguments[i].value.data);
82+
call->arguments[i].value.mutable_flag = arguments[i].value.mutable_flag;
83+
call->arguments[i].attribute.name = pizza_io_cstr_dup(arguments[i].attribute.name);
84+
call->arguments[i].attribute.description = pizza_io_cstr_dup(arguments[i].attribute.description);
85+
call->arguments[i].attribute.id = pizza_io_cstr_dup(arguments[i].attribute.id);
86+
87+
if (!call->arguments[i].value.data || !call->arguments[i].attribute.name ||
88+
!call->arguments[i].attribute.description || !call->arguments[i].attribute.id) {
89+
for (int j = 0; j <= i; ++j) {
90+
pizza_sys_memory_free(call->arguments[j].value.data);
91+
pizza_sys_memory_free(call->arguments[j].attribute.name);
92+
pizza_sys_memory_free(call->arguments[j].attribute.description);
93+
pizza_sys_memory_free(call->arguments[j].attribute.id);
94+
}
95+
pizza_sys_memory_free(call->arguments);
96+
pizza_sys_memory_free(call->function_name);
97+
pizza_sys_memory_free(call);
98+
return;
99+
}
100+
}
101+
} else {
102+
call->arguments = NULL;
99103
}
100104

101105
call->num_args = num_args;

0 commit comments

Comments
 (0)