ALLOCD_BOOL(zck, src);
comp->data = zrealloc(comp->data, comp->data_size + src_size);
+ if (!comp->data) {
+ zck_log(ZCK_LOG_ERROR, "OOM in %s", __func__);
+ return false;
+ }
zck_log(ZCK_LOG_DEBUG, "Adding %lu bytes to compressed buffer",
src_size);
memcpy(comp->data + comp->data_size, src, src_size);
ALLOCD_INT(zck, comp);
comp->dc_data = zrealloc(comp->dc_data, comp->dc_data_size + src_size);
+ if (!comp->dc_data) {
+ zck_log(ZCK_LOG_ERROR, "OOM in %s", __func__);
+ return -1;
+ }
memcpy(comp->dc_data + comp->dc_data_size, src, src_size);
*dst = NULL;
/* Add new data to stored buffer */
if(mp->buffer) {
buf = zrealloc(mp->buffer, mp->buffer_len + l);
+ if (!buf) {
+ zck_log(ZCK_LOG_ERROR, "OOM in %s", __func__);
+ return 0;
+ }
memcpy(buf + mp->buffer_len, b, l);
l = mp->buffer_len + l;
mp->buffer = NULL; // No need to free, buf holds realloc'd buffer
if(length > buf_size-loc) {
buf_size = (int)(buf_size * 1.5);
output = zrealloc(output, buf_size);
+ if (!output) {
+ zck_log(ZCK_LOG_ERROR, "OOM in %s", __func__);
+ return output;
+ }
continue;
}
loc += length;
static bool read_header_from_file(zckCtx *zck) {
/* Allocate header and store any extra bytes at beginning of header */
zck->header = zrealloc(zck->header, zck->lead_size + zck->header_length);
+ if (!zck->header) {
+ zck_log(ZCK_LOG_ERROR, "OOM in %s", __func__);
+ return false;
+ }
zck->lead_string = zck->header;
char *header = zck->header + zck->lead_size;
size_t loaded = 0;
/* Shrink header to actual size */
header = zrealloc(header, length);
+ if (!header) {
+ zck_log(ZCK_LOG_ERROR, "OOM in %s", __func__);
+ return false;
+ }
zck->preface_string = header;
zck->preface_size = length;
length += zck->hash_type.digest_size;
header = zrealloc(header, length);
+ if (!header) {
+ zck_log(ZCK_LOG_ERROR, "OOM in %s", __func__);
+ return false;
+ }
zck->lead_string = header;
zck->lead_size = length;
/* Read header digest */
zck_log(ZCK_LOG_DEBUG, "Reading header digest");
header = zrealloc(header, length + zck->hash_type.digest_size);
+ if (!header) {
+ zck_log(ZCK_LOG_ERROR, "OOM in %s", __func__);
+ return false;
+ }
size_t to_read = 0;
if(lead < length + zck->hash_type.digest_size)
to_read = length + zck->hash_type.digest_size - lead;
}
/* Shrink index to actual size */
index = zrealloc(index, index_size);
+ if (!index) {
+ zck_log(ZCK_LOG_ERROR, "OOM in %s", __func__);
+ return false;
+ }
zck->index_string = index;
zck->index_size = index_size;
zck_log(ZCK_LOG_DEBUG, "Generated index: %lu bytes", zck->index_size);
void *zrealloc(void *ptr, size_t size) {
void *ret = realloc(ptr, size);
+ /*
+ * Realloc does not touch the original block if fails.
+ * Policy is to free memory and returns with error (Null)
+ */
+ if (!ret && ptr)
+ free(ptr);
return ret;
}