/* Get rid of any already read data and allocate space for new data */
char *temp = zmalloc(comp->dc_data_size - comp->dc_data_loc + src_size);
+ if (!temp) {
+ zck_log(ZCK_LOG_ERROR, "OOM in %s", __func__);
+ return false;
+ }
if(comp->dc_data_loc != 0)
zck_log(ZCK_LOG_DEBUG, "Freeing %lu bytes from decompressed buffer",
comp->dc_data_loc);
size_t dc = 0;
char *src = zmalloc(dst_size - dc);
+ if (!src) {
+ zck_log(ZCK_LOG_ERROR, "OOM in %s", __func__);
+ return false;
+ }
bool finished_rd = false;
bool finished_dc = false;
zck_log(ZCK_LOG_DEBUG, "Trying to read %lu bytes", dst_size);
ALLOCD_INT(zck, comp);
*dst = zmalloc(src_size);
+ if (!dst) {
+ zck_log(ZCK_LOG_ERROR, "OOM in %s", __func__);
+ return 0;
+ }
memcpy(*dst, src, src_size);
*dst_size = src_size;
}
*dst = zmalloc(max_size);
+ if (!dst) {
+ zck_log(ZCK_LOG_ERROR, "OOM in %s", __func__);
+ return false;
+ }
#ifdef OLD_ZSTD
/* Currently, compression isn't deterministic when using contexts in
* zstd 1.3.5, so this works around it */
comp->data_size = 0;
char *dst = zmalloc(fd_size);
+ if (!dst) {
+ zck_log(ZCK_LOG_ERROR, "OOM in %s", __func__);
+ return false;
+ }
size_t retval = 0;
zck_log(ZCK_LOG_DEBUG, "Decompressing %lu bytes to %lu bytes", src_size,
fd_size);
/* Initialize zckDL. When finished, zckDL *must* be freed by zck_dl_free() */
zckDL PUBLIC *zck_dl_init(zckCtx *zck) {
zckDL *dl = zmalloc(sizeof(zckDL));
+ if (!dl) {
+ zck_log(ZCK_LOG_ERROR, "OOM in %s", __func__);
+ return NULL;
+ }
dl->mp = zmalloc(sizeof(zckMP));
dl->zck = zck;
return dl;
if(regex == NULL || boundary == NULL)
return NULL;
char *regex_b = zmalloc(strlen(regex) + strlen(boundary) + 1);
- if(snprintf(regex_b, strlen(regex) + strlen(boundary), regex,
+ if(!regex_b || snprintf(regex_b, strlen(regex) + strlen(boundary), regex,
boundary) != strlen(regex) + strlen(boundary) - 2) {
free(regex_b);
set_error(zck, "Unable to build regular expression");
if(regex_n == NULL)
return false;
dl->dl_regex = zmalloc(sizeof(regex_t));
- if(!create_regex(dl->zck, dl->dl_regex, regex_n)) {
+ if(!dl->dl_regex || !create_regex(dl->zck, dl->dl_regex, regex_n)) {
free(regex_n);
return false;
}
if(regex_e == NULL)
return false;
dl->end_regex = zmalloc(sizeof(regex_t));
- if(!create_regex(dl->zck, dl->end_regex, regex_e)) {
+ if(!dl->end_regex || !create_regex(dl->zck, dl->end_regex, regex_e)) {
free(regex_e);
return false;
}
size_t size = buf + l - header_start;
if(size > 0) {
mp->buffer = zmalloc(size);
+ if (!mp->buffer) {
+ zck_log(ZCK_LOG_ERROR, "OOM in %s", __func__);
+ return 0;
+ }
memcpy(mp->buffer, header_start, size);
mp->buffer_len = size;
}
if(dl->hdr_regex == NULL) {
char *regex = "boundary *= *(.*?) *\r";
dl->hdr_regex = zmalloc(sizeof(regex_t));
- if(!create_regex(dl->zck, dl->hdr_regex, regex))
+ if(!dl->hdr_regex || !create_regex(dl->zck, dl->hdr_regex, regex))
return 0;
}
/* Copy buffer to null-terminated string because POSIX regex requires null-
* terminated string */
char *buf = zmalloc(size+1);
+ if (!buf) {
+ zck_log(ZCK_LOG_ERROR, "OOM in %s", __func__);
+ return 0;
+ }
buf[size] = '\0';
memcpy(buf, b, size);
boundary_length -= 2;
}
char *boundary = zmalloc(boundary_length + 1);
+ if (!boundary) {
+ zck_log(ZCK_LOG_ERROR, "OOM in %s", __func__);
+ free(buf);
+ return 0;
+ }
memcpy(boundary, boundary_start, boundary_length);
zck_log(ZCK_LOG_DEBUG, "Multipart boundary: %s", boundary);
dl->boundary = boundary;
VALIDATE_PTR(zck);
zckRangeItem *new = zmalloc(sizeof(zckRangeItem));
+ if (!new) {
+ zck_log(ZCK_LOG_ERROR, "OOM in %s", __func__);
+ return NULL;
+ }
new->start = start;
new->end = end;
if(prev) {
char PUBLIC *zck_get_range_char(zckCtx *zck, zckRange *range) {
int buf_size = BUF_SIZE;
char *output = zmalloc(buf_size);
+ if (!output) {
+ zck_log(ZCK_LOG_ERROR, "OOM in %s", __func__);
+ return NULL;
+ }
int loc = 0;
int count = 0;
zckRangeItem *ri = range->first;
VALIDATE_PTR(zck);
zckRange *range = zmalloc(sizeof(zckRange));
+ if (!range) {
+ zck_log(ZCK_LOG_ERROR, "OOM in %s", __func__);
+ return NULL;
+ }
for(zckChunk *chk = zck->index.first; chk; chk = chk->next) {
if(chk->valid)
continue;
zck->msg = zmalloc(size + old_size + 3);
else
zck->msg = zmalloc(size + 2);
+ if (!zck->msg) {
+ zck_log(ZCK_LOG_ERROR, "OOM in %s", __func__);
+ return;
+ }
va_start(args, format);
vsnprintf(zck->msg, size + 1, format, args);
va_end(args);
char *get_digest_string(const char *digest, int size) {
char *str = zmalloc(size*2+1);
+ if (!str) {
+ zck_log(ZCK_LOG_ERROR, "OOM in %s", __func__);
+ return NULL;
+ }
for(int i=0; i<size; i++)
snprintf(str + i*2, 3, "%02x", (unsigned char)digest[i]);
return str;
if(hash_type->type == ZCK_HASH_SHA1) {
zck_log(ZCK_LOG_DDEBUG, "Initializing SHA-1 hash");
hash->ctx = zmalloc(sizeof(SHA_CTX));
+ if (!hash->ctx) {
+ zck_log(ZCK_LOG_ERROR, "OOM in %s", __func__);
+ return false;
+ }
hash->type = hash_type;
SHA1_Init((SHA_CTX *) hash->ctx);
return true;
} else if(hash_type->type == ZCK_HASH_SHA256) {
zck_log(ZCK_LOG_DDEBUG, "Initializing SHA-256 hash");
hash->ctx = zmalloc(sizeof(SHA256_CTX));
+ if (!hash->ctx) {
+ zck_log(ZCK_LOG_ERROR, "OOM in %s", __func__);
+ return false;
+ }
hash->type = hash_type;
SHA256_Init((SHA256_CTX *) hash->ctx);
return true;
hash_type->type <= ZCK_HASH_SHA512_128) {
zck_log(ZCK_LOG_DDEBUG, "Initializing SHA-512 hash");
hash->ctx = zmalloc(sizeof(SHA512_CTX));
+ if (!hash->ctx) {
+ zck_log(ZCK_LOG_ERROR, "OOM in %s", __func__);
+ return false;
+ }
hash->type = hash_type;
SHA512_Init((SHA512_CTX *) hash->ctx);
return true;
}
if(hash->type->type == ZCK_HASH_SHA1) {
unsigned char *digest = zmalloc(SHA1_DIGEST_LENGTH);
+ if (!digest) {
+ zck_log(ZCK_LOG_ERROR, "OOM in %s", __func__);
+ return false;
+ }
SHA1_Final((sha1_byte*)digest, (SHA_CTX *)hash->ctx);
hash_close(hash);
return (char *)digest;
} else if(hash->type->type == ZCK_HASH_SHA256) {
unsigned char *digest = zmalloc(SHA256_DIGEST_SIZE);
+ if (!digest) {
+ zck_log(ZCK_LOG_ERROR, "OOM in %s", __func__);
+ return false;
+ }
SHA256_Final(digest, (SHA256_CTX *)hash->ctx);
hash_close(hash);
return (char *)digest;
} else if(hash->type->type >= ZCK_HASH_SHA512 &&
hash->type->type <= ZCK_HASH_SHA512_128) {
unsigned char *digest = zmalloc(SHA512_DIGEST_SIZE);
+ if (!digest) {
+ zck_log(ZCK_LOG_ERROR, "OOM in %s", __func__);
+ return false;
+ }
SHA512_Final(digest, (SHA512_CTX *)hash->ctx);
hash_close(hash);
return (char *)digest;
return false;
}
zck->full_hash_digest = zmalloc(zck->hash_type.digest_size);
+ if (!zck->full_hash_digest) {
+ zck_log(ZCK_LOG_ERROR, "OOM in %s", __func__);
+ return false;
+ }
memcpy(zck->full_hash_digest, header+length, zck->hash_type.digest_size);
length += zck->hash_type.digest_size;
int header_malloc = zck->hash_type.digest_size + 4 + 2*MAX_COMP_SIZE;
char *header = zmalloc(header_malloc);
+ if (!header) {
+ zck_log(ZCK_LOG_ERROR, "OOM in %s", __func__);
+ return false;
+ }
size_t length = 0;
/* Write out the full data digest */
char *header = zmalloc(MAX_COMP_SIZE);
size_t length = 0;
+ if (!header) {
+ zck_log(ZCK_LOG_ERROR, "OOM in %s", __func__);
+ return false;
+ }
zck_log(ZCK_LOG_DEBUG, "Calculating %i signatures", zck->sigs.count);
/* Write out signature count and signatures */
memcpy(header, "\0ZCK1", 5);
length += 5;
+ if (!header) {
+ zck_log(ZCK_LOG_ERROR, "OOM in %s", __func__);
+ return false;
+ }
/* Write out full data and header hash type */
compint_from_size(header + length, zck->hash_type.type, &length);
/* Write out header length */
zck_log(ZCK_LOG_DEBUG, "Merging into header: %lu bytes",
zck->data_offset);
zck->header = zmalloc(zck->data_offset);
+ if (!zck->header) {
+ zck_log(ZCK_LOG_ERROR, "OOM in %s", __func__);
+ return false;
+ }
size_t offs = 0;
memcpy(zck->header + offs, zck->lead_string, zck->lead_size);
free(zck->lead_string);
int lead = 5 + 2*MAX_COMP_SIZE;
char *header = zmalloc(lead);
+ if (!header) {
+ zck_log(ZCK_LOG_ERROR, "OOM in %s", __func__);
+ return false;
+ }
size_t length = 0;
if(read_data(zck, header, lead) < lead) {
return false;
}
zck->header_digest = zmalloc(zck->hash_type.digest_size);
+ if (!zck->header_digest) {
+ zck_log(ZCK_LOG_ERROR, "OOM in %s", __func__);
+ free(header);
+ return false;
+ }
memcpy(zck->header_digest, header + length, zck->hash_type.digest_size);
length += zck->hash_type.digest_size;
clear_work_index(zck);
zck->work_index_item = zmalloc(sizeof(zckChunk));
+ if (!zck->work_index_item) {
+ zck_log(ZCK_LOG_ERROR, "OOM in %s", __func__);
+ return false;
+ }
if(!hash_init(zck, &(zck->work_index_hash), &(zck->chunk_hash_type)) ||
(!hash_init(zck, &(zck->work_index_hash_uncomp), &(zck->chunk_hash_type))))
return false;
item->digest = zmalloc(index->digest_size);
item->digest_uncompressed = zmalloc(index->digest_size);
+ if (!item->digest || !item->digest_uncompressed) {
+ free(item->digest);
+ zck_log(ZCK_LOG_ERROR, "OOM in %s", __func__);
+ return false;
+ }
if(digest) {
memcpy(item->digest, digest, index->digest_size);
item->digest_size = index->digest_size;
/* Write index */
index = zmalloc(index_malloc);
+ if (!index) {
+ zck_log(ZCK_LOG_ERROR, "OOM in %s", __func__);
+ return false;
+ }
compint_from_size(index+index_size, zck->index.hash_type, &index_size);
compint_from_size(index+index_size, zck->index.count, &index_size);
if(zck->index.first) {
return false;
}
zckChunk *chk = zmalloc(sizeof(zckChunk));
+ if (!chk) {
+ zck_log(ZCK_LOG_ERROR, "OOM in %s", __func__);
+ return false;
+ }
index->digest_size = digest_size;
chk->comp_length = comp_size;
chk->length = orig_size;
} else {
digest = zmalloc(zck->chunk_hash_type.digest_size);
digest_uncompressed = zmalloc(zck->chunk_hash_type.digest_size);
+ if (!digest || !digest_uncompressed) {
+ free(digest);
+ zck_log(ZCK_LOG_ERROR, "OOM in %s", __func__);
+ return false;
+ }
}
if(!finish_chunk(&(zck->index), zck->work_index_item, digest, digest_uncompressed, true, zck)) {
free(digest);
zckChunk *tmp = NULL;
zckChunk *new = zmalloc(sizeof(zckChunk));
+ if (!new) {
+ zck_log(ZCK_LOG_ERROR, "OOM in %s", __func__);
+ return false;
+ }
/* Read index entry digest */
new->digest = zmalloc(zck->index.digest_size);
+ if (!new->digest) {
+ zck_log(ZCK_LOG_ERROR, "OOM in %s", __func__);
+ free(new);
+ return false;
+ }
memcpy(new->digest, data+length, zck->index.digest_size);
new->digest_size = zck->index.digest_size;
HASH_FIND(hh, zck->index.ht, new->digest, new->digest_size, tmp);
if (zck->has_uncompressed_source) {
/* same size for digest as compressed */
new->digest_uncompressed = zmalloc(zck->index.digest_size);
+ if (!new->digest_uncompressed) {
+ free(new->digest);
+ free(new);
+ zck_log(ZCK_LOG_ERROR, "OOM in %s", __func__);
+ return false;
+ }
memcpy(new->digest_uncompressed, data+length, zck->index.digest_size);
new->digest_size_uncompressed = zck->index.digest_size;
length += zck->index.digest_size;
return false;
char *data = zmalloc(BUF_SIZE);
+ if (!data) {
+ zck_log(ZCK_LOG_ERROR, "OOM in %s", __func__);
+ return false;
+ }
while((read_count = read(zck->temp_fd, data, BUF_SIZE)) > 0) {
if(!write_data(zck, zck->fd, data, read_count)) {
char *raw_checksum = zmalloc(checksum_length/2);
char *rp = raw_checksum;
int buf = 0;
+ if (!raw_checksum) {
+ zck_log(ZCK_LOG_ERROR, "OOM in %s", __func__);
+ return NULL;
+ }
for (int i=0; i<checksum_length; i++) {
// Get integer value of hex checksum character. If -1 is returned, then
// the character wasn't actually hex, so return NULL
void *zmalloc(size_t size) {
void *ret = calloc(1, size);
- assert(ret);
return ret;
}
void *zrealloc(void *ptr, size_t size) {
void *ret = realloc(ptr, size);
- assert(ret);
return ret;
}
}
fname = zmalloc(strlen(template) + strlen(tmpdir) + 2);
+ if (!fname) {
+ zck_log(ZCK_LOG_ERROR, "OOM in %s", __func__);
+ return -ENOMEM;
+ }
int i=0;
for(i=0; i<strlen(tmpdir); i++)
fname[i] = tmpdir[i];
zck_log(ZCK_LOG_DEBUG, "Reading compression dict");
char *data = zmalloc(size);
+ if (!data) {
+ zck_log(ZCK_LOG_ERROR, "OOM in %s", __func__);
+ return false;
+ }
if(comp_read(zck, data, size, 0) != size) {
set_error(zck, "Error reading compressed dict");
return false;
size_t length) {
VALIDATE_BOOL(zck);
char *data = zmalloc(length);
+ if (!data) {
+ zck_log(ZCK_LOG_ERROR, "OOM in %s", __func__);
+ return false;
+ }
memcpy(data, value, length);
/* Validation options */
zckCtx PUBLIC *zck_create() {
zckCtx *zck = zmalloc(sizeof(zckCtx));
+ if (!zck) {
+ zck_log(ZCK_LOG_ERROR, "OOM in %s", __func__);
+ return false;
+ }
zck_clear_error(NULL);
zck->prep_hash_type = -1;
zck->prep_hdr_size = -1;