diff options
author | Christian Göttsche <cgzones@googlemail.com> | 2020-10-05 12:49:01 +0200 |
---|---|---|
committer | Christian Göttsche <cgzones@googlemail.com> | 2020-10-19 15:35:43 +0200 |
commit | 577416d1a946382ab9f0c523e5fae755f9d71f69 (patch) | |
tree | 178b99a4d3d40137c0fcb765d655339f53b37728 | |
parent | 0db398d4c3472071b2814505242450cd8f831501 (diff) |
Assert allocating non-zero size memory
Allocating zero size memory results in implementation-defined behavior:
man:malloc(3) :
If size is 0, then malloc() returns either NULL, or a unique pointer
value that can later be successfully passed to free().
-rw-r--r-- | Meter.c | 2 | ||||
-rw-r--r-- | XUtils.c | 12 |
2 files changed, 7 insertions, 7 deletions
@@ -38,7 +38,7 @@ Meter* Meter_new(struct ProcessList_* pl, int param, const MeterClass* type) { this->param = param; this->pl = pl; this->curItems = type->maxItems; - this->values = xCalloc(type->maxItems, sizeof(double)); + this->values = type->maxItems ? xCalloc(type->maxItems, sizeof(double)) : NULL; this->total = type->total; this->caption = xStrdup(type->caption); if (Meter_initFn(this)) @@ -25,26 +25,26 @@ void fail() { } void* xMalloc(size_t size) { + assert(size > 0); void* data = malloc(size); - if (!data && size > 0) { + if (!data) { fail(); } return data; } void* xCalloc(size_t nmemb, size_t size) { + assert(nmemb > 0); + assert(size > 0); void* data = calloc(nmemb, size); - if (!data && nmemb > 0 && size > 0) { + if (!data) { fail(); } return data; } void* xRealloc(void* ptr, size_t size) { - if (!size) { - free(ptr); - return NULL; - } + assert(size > 0); void* data = realloc(ptr, size); // deepcode ignore MemoryLeakOnRealloc: this goes to fail() if (!data) { free(ptr); |