aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--csv.c9
-rw-r--r--csv.h2
2 files changed, 6 insertions, 5 deletions
diff --git a/csv.c b/csv.c
index 5c92b32..1ba3aa7 100644
--- a/csv.c
+++ b/csv.c
@@ -33,13 +33,14 @@ csv_mem_reallocate(void *ptr, size_t n, size_t sz, void *cb_arg)
33} 33}
34 34
35static void 35static void
36csv_mem_free(void *ptr, size_t sz, void *cb_arg) 36csv_mem_free(void *ptr, size_t n, size_t sz, void *cb_arg)
37{ 37{
38 void explicit_bzero(void *b, size_t len); 38 void explicit_bzero(void *b, size_t len);
39 39
40 (void) cb_arg; 40 (void) cb_arg;
41 41
42 explicit_bzero(ptr, sz); 42 // TODO: Check for overflow!
43 explicit_bzero(ptr, n * sz);
43 free(ptr); 44 free(ptr);
44} 45}
45 46
@@ -133,7 +134,7 @@ csv_string_free(csv_string_t *csv_string, const csv_options_t * const csv_option
133 assert(csv_string != NULL); 134 assert(csv_string != NULL);
134 assert(csv_options != NULL); 135 assert(csv_options != NULL);
135 136
136 csv_options->cb_free(csv_string->str, csv_string->cap, csv_options->cb_memory_arg); 137 csv_options->cb_free(csv_string->str, csv_string->cap, 1, csv_options->cb_memory_arg);
137 138
138 // call *_init() for sane default values; prevent possible double-free 139 // call *_init() for sane default values; prevent possible double-free
139 csv_string_init(csv_string); 140 csv_string_init(csv_string);
@@ -197,7 +198,7 @@ csv_field_free(csv_field_t *csv_field, const csv_options_t * const csv_options)
197 assert(csv_field != NULL); 198 assert(csv_field != NULL);
198 assert(csv_options != NULL); 199 assert(csv_options != NULL);
199 200
200 csv_options->cb_free(csv_field->fields, csv_field->cap, csv_options->cb_memory_arg); 201 csv_options->cb_free(csv_field->fields, csv_field->cap, sizeof(csv_field->fields[0]), csv_options->cb_memory_arg);
201 202
202 csv_field_init(csv_field); 203 csv_field_init(csv_field);
203} 204}
diff --git a/csv.h b/csv.h
index 9477703..8396d85 100644
--- a/csv.h
+++ b/csv.h
@@ -25,7 +25,7 @@ typedef struct {
25 25
26 void *(*cb_allocate)(size_t, size_t, void *); 26 void *(*cb_allocate)(size_t, size_t, void *);
27 void *(*cb_reallocate)(void *, size_t, size_t, void *); 27 void *(*cb_reallocate)(void *, size_t, size_t, void *);
28 void (*cb_free)(void *, size_t sz, void *); 28 void (*cb_free)(void *, size_t, size_t sz, void *);
29 void *cb_memory_arg; 29 void *cb_memory_arg;
30} csv_options_t; 30} csv_options_t;
31 31