diff options
| -rw-r--r-- | csv.c | 18 |
1 files changed, 6 insertions, 12 deletions
| @@ -25,28 +25,22 @@ csv_mem_allocate(size_t n, size_t sz, void *cb_arg) | |||
| 25 | static void * | 25 | static void * |
| 26 | csv_mem_reallocate(void *ptr, size_t n, size_t sz, void *cb_arg) | 26 | csv_mem_reallocate(void *ptr, size_t n, size_t sz, void *cb_arg) |
| 27 | { | 27 | { |
| 28 | size_t len; | ||
| 29 | |||
| 30 | (void) cb_arg; | 28 | (void) cb_arg; |
| 31 | 29 | ||
| 32 | if ( !__builtin_mul_overflow(n, sz, &len) ) { | 30 | size_t len; |
| 33 | return realloc(ptr, len); | 31 | if ( __builtin_mul_overflow(n, sz, &len) ) { |
| 32 | return NULL; | ||
| 34 | } | 33 | } |
| 35 | return NULL; | 34 | return realloc(ptr, len); |
| 36 | } | 35 | } |
| 37 | 36 | ||
| 38 | static void | 37 | static void |
| 39 | csv_mem_free(void *ptr, size_t n, size_t sz, void *cb_arg) | 38 | csv_mem_free(void *ptr, size_t n, size_t sz, void *cb_arg) |
| 40 | { | 39 | { |
| 41 | size_t len; | 40 | (void) n; |
| 42 | 41 | (void) sz; | |
| 43 | void explicit_bzero(void *b, size_t len); | ||
| 44 | |||
| 45 | (void) cb_arg; | 42 | (void) cb_arg; |
| 46 | 43 | ||
| 47 | if ( !__builtin_mul_overflow(n, sz, &len) ) { | ||
| 48 | explicit_bzero(ptr, len); | ||
| 49 | } | ||
| 50 | free(ptr); | 44 | free(ptr); |
| 51 | } | 45 | } |
| 52 | 46 | ||
