aboutsummaryrefslogtreecommitdiff
path: root/csv.c
diff options
context:
space:
mode:
authorThomas Schmucker <ts@its1.de>2020-06-25 16:59:03 +0200
committerThomas Schmucker <ts@its1.de>2020-06-25 16:59:03 +0200
commitb492bd3942966e7ba32f3b14e5c95bd0c246c1a3 (patch)
treeac1e25b5093a83fb4886c9f99402f02635492d4c /csv.c
parentd63932bc25f8682611deebac44ee14a102f389f4 (diff)
downloadlibcsv-b492bd3942966e7ba32f3b14e5c95bd0c246c1a3.tar.gz
libcsv-b492bd3942966e7ba32f3b14e5c95bd0c246c1a3.tar.bz2
libcsv-b492bd3942966e7ba32f3b14e5c95bd0c246c1a3.zip
Prüfe auf Integer-Überlauf
Diffstat (limited to 'csv.c')
-rw-r--r--csv.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/csv.c b/csv.c
index 1ba3aa7..f154c12 100644
--- a/csv.c
+++ b/csv.c
@@ -25,22 +25,28 @@ csv_mem_allocate(size_t n, size_t sz, void *cb_arg)
25static void * 25static void *
26csv_mem_reallocate(void *ptr, size_t n, size_t sz, void *cb_arg) 26csv_mem_reallocate(void *ptr, size_t n, size_t sz, void *cb_arg)
27{ 27{
28 void *reallocarray(void *ptr, size_t nmemb, size_t size); 28 size_t len;
29 29
30 (void) cb_arg; 30 (void) cb_arg;
31 31
32 return reallocarray(ptr, n, sz); 32 if ( !__builtin_mul_overflow(n, sz, &len) ) {
33 return realloc(ptr, len);
34 }
35 return NULL;
33} 36}
34 37
35static void 38static void
36csv_mem_free(void *ptr, size_t n, size_t sz, void *cb_arg) 39csv_mem_free(void *ptr, size_t n, size_t sz, void *cb_arg)
37{ 40{
41 size_t len;
42
38 void explicit_bzero(void *b, size_t len); 43 void explicit_bzero(void *b, size_t len);
39 44
40 (void) cb_arg; 45 (void) cb_arg;
41 46
42 // TODO: Check for overflow! 47 if ( !__builtin_mul_overflow(n, sz, &len) ) {
43 explicit_bzero(ptr, n * sz); 48 explicit_bzero(ptr, len);
49 }
44 free(ptr); 50 free(ptr);
45} 51}
46 52