This patch is not stable yet.
Joe Maimon wrote:
Return value checks for cli_malloc/cli_calloc/cli_realloc/malloc/calloc/realloc
Some of the reactions may not be wholly apropriate but are certainly no worse than a segfault?
Joe
------------------------------------------------------------------------
Only in clamav-devel.jm-pl4: autom4te.cache Only in clamav-devel.jm-pl4: backup-051220042311-pre-clamav-devel.jm-pl4.tgz diff -ur --exclude=*config* clamav-devel-jm4/clamscan/manager.c clamav-devel.jm-pl4/clamscan/manager.c --- clamav-devel-jm4/clamscan/manager.c Thu May 13 13:12:35 2004 +++ clamav-devel.jm-pl4/clamscan/manager.c Thu May 13 13:08:26 2004 @@ -164,12 +164,16 @@ /* set (default) limits */
limits = (struct cl_limits *) calloc(1, sizeof(struct cl_limits)); + if(!limits) + exit(60);
if(optl(opt, "max-space")) { char *cpy, *ptr; ptr = getargl(opt, "max-space"); if(tolower(ptr[strlen(ptr) - 1]) == 'm') { cpy = mcalloc(strlen(ptr), sizeof(char)); + if(!cpy) + exit(60); strncpy(cpy, ptr, strlen(ptr) - 1); limits->maxfilesize = atoi(cpy) * 1024 * 1024; free(cpy); Only in clamav-devel.jm-pl4: description-pak Only in clamav-devel.jm-pl4: doc-pak Only in clamav-devel.jm-pl4/libclamav: .message.c.swp Only in clamav-devel.jm-pl4/libclamav: .vba_extract.c.swp diff -ur --exclude=*config* clamav-devel-jm4/libclamav/blob.c clamav-devel.jm-pl4/libclamav/blob.c --- clamav-devel-jm4/libclamav/blob.c Thu May 13 13:12:18 2004 +++ clamav-devel.jm-pl4/libclamav/blob.c Thu May 13 13:08:09 2004 @@ -166,8 +166,12 @@ b->size = len * 4; b->data = cli_malloc(b->size); } else if(b->size < b->len + len) { + void * p = NULL; b->size += len * 4; - b->data = cli_realloc(b->data, b->size); + p = cli_realloc(b->data, b->size); + if(!p) + return; + b->data = p; }
if(b->data) { @@ -200,8 +204,13 @@ b->isClosed = 1;
if(b->size != b->len) { + void * p = NULL; + b->size = b->len; - b->data = cli_realloc(b->data, b->size); + p = cli_realloc(b->data, b->size); + if(!p) + return; + b->data = p; } }
@@ -252,7 +261,11 @@ b->size = len; b->data = cli_malloc(len); } else { + void * p = NULL; b->size += len; - b->data = cli_realloc(b->data, b->size); + p = cli_realloc(b->data, b->size); + if(!p) + return; + b->data = p; } } diff -ur --exclude=*config* clamav-devel-jm4/libclamav/cvd.c clamav-devel.jm-pl4/libclamav/cvd.c --- clamav-devel-jm4/libclamav/cvd.c Thu May 13 13:12:18 2004 +++ clamav-devel.jm-pl4/libclamav/cvd.c Thu May 13 13:08:29 2004 @@ -55,6 +55,8 @@
fullname = (char *) calloc(sizeof(char), strlen(destdir) + 100 + 5); + if(!fullname) + return -1;
while(1) {
@@ -163,6 +165,8 @@ }
cvd = (struct cl_cvd *) cli_calloc(1, sizeof(struct cl_cvd)); + if(!cvd) + return NULL;
if(!(cvd->time = cli_strtok(head, 1, ":"))) { cli_errmsg("CVD -> Can't extract time from header.\n"); diff -ur --exclude=*config* clamav-devel-jm4/libclamav/dsig.c clamav-devel.jm-pl4/libclamav/dsig.c --- clamav-devel-jm4/libclamav/dsig.c Thu May 13 13:12:18 2004 +++ clamav-devel.jm-pl4/libclamav/dsig.c Thu May 13 13:08:29 2004 @@ -83,6 +83,8 @@
mpz_init(p); decoded = (char *) calloc(plainlen + 1, sizeof(char)); + if(!decoded) + return NULL;
mpz_powm(p, c, e, n); /* plain = cipher^e mod n */ mpz_clear(c); diff -ur --exclude=*config* clamav-devel-jm4/libclamav/message.c clamav-devel.jm-pl4/libclamav/message.c --- clamav-devel-jm4/libclamav/message.c Thu May 13 13:12:18 2004 +++ clamav-devel.jm-pl4/libclamav/message.c Thu May 13 13:10:55 2004 @@ -250,6 +250,8 @@ messageCreate(void) { message *m = (message *)cli_calloc(1, sizeof(message)); + if(!m) + return NULL;
m->mimeType = NOMIME; m->encodingType = NOENCODING; @@ -443,8 +445,13 @@ return; /* already in there */
if(offset == m->numberOfArguments) { + void * p = NULL; + m->numberOfArguments++; - m->mimeArguments = (char **)cli_realloc(m->mimeArguments, m->numberOfArguments * sizeof(char *)); + p = cli_realloc(m->mimeArguments, m->numberOfArguments * sizeof(char *)); + if(!p) + return; + m->mimeArguments = (char **) p; }
m->mimeArguments[offset] = strdup(arg); @@ -572,6 +579,8 @@ *ptr = '\0';
field = cli_malloc(strlen(key) + strlen(data) + 2); + if(!field) + return; sprintf(field, "%s=%s", key, data);
free((char *)key); @@ -593,6 +602,8 @@
len = (size_t)string - (size_t)key + 1; field = cli_malloc(len); + if(!field) + return;
memcpy(field, key, len - 1); field[len - 1] = '\0'; @@ -900,6 +911,12 @@ * * See RFC1741 */ + + if(!tmp) { + blobDestroy(b); + return NULL; + } + while((t_line = t_line->t_next) != NULL) blobAddData(tmp, (unsigned char *)t_line->t_text, strlen(t_line->t_text));
@@ -934,6 +951,11 @@ cli_dbgmsg("decode HQX7 message (%lu bytes)\n", len);
ptr = cli_malloc(len); + if(!ptr) { + blobDestroy(tmp); + blobDestroy(b); + return NULL; + } memcpy(ptr, data, len); bytenumber = 0;
@@ -998,6 +1020,11 @@ */ if(memchr(data, 0x90, newlen)) { blob *u = blobCreate(); /* uncompressed data */ + if(!u) { + blobDestroy(tmp); + blobDestroy(b); + return NULL; + }
/* * Includes compression @@ -1053,10 +1080,20 @@ */ byte = data[0]; filename = cli_malloc(byte + 1); + if(!filename) { + blobDestroy(tmp); + blobDestroy(b); + return NULL; + } memcpy(filename, &data[1], byte); filename[byte] = '\0'; blobSetFilename(b, filename); ptr = cli_malloc(strlen(filename) + 6); + if(!ptr) { + blobDestroy(tmp); + blobDestroy(b); + return NULL; + } sprintf(ptr, "name=%s", filename); messageAddArgument(m, ptr); free(ptr); @@ -1177,8 +1214,12 @@ for(t_line = messageGetBody(m); t_line; t_line = t_line->t_next) { if(first == NULL) first = last = cli_malloc(sizeof(text)); + if(!first) + return NULL; else { last->t_next = cli_malloc(sizeof(text)); + if(!last->t_next) + return NULL; last = last->t_next; }
@@ -1221,8 +1262,12 @@
if(first == NULL) first = last = cli_malloc(sizeof(text)); + if(!first) + return(NULL); else { last->t_next = cli_malloc(sizeof(text)); + if(!last->t_next) + return NULL; last = last->t_next; }
diff -ur --exclude=*config* clamav-devel-jm4/libclamav/ole2_extract.c clamav-devel.jm-pl4/libclamav/ole2_extract.c --- clamav-devel-jm4/libclamav/ole2_extract.c Thu May 13 13:12:18 2004 +++ clamav-devel.jm-pl4/libclamav/ole2_extract.c Thu May 13 13:08:29 2004 @@ -536,7 +536,7 @@ { unsigned char buff[(1 << hdr->log2_big_block_size)]; int32_t current_block, ofd, len, offset; - char *name, *newname; + char *name = NULL, *newname = NULL;
if (prop->type != 2) { /* Not a file */ @@ -561,6 +561,11 @@ }
newname = (char *) cli_malloc(strlen(name) + strlen(dir) + 2); + if(!newname) { + if(name) + free(name); + return FALSE; + } sprintf(newname, "%s/%s", dir, name); free(name);
diff -ur --exclude=*config* clamav-devel-jm4/libclamav/others.c clamav-devel.jm-pl4/libclamav/others.c --- clamav-devel-jm4/libclamav/others.c Thu May 13 13:12:18 2004 +++ clamav-devel.jm-pl4/libclamav/others.c Thu May 13 13:08:29 2004 @@ -174,6 +174,8 @@ fclose(fd);
md5str = (char*) calloc(32 + 1, sizeof(char)); + if(!md5str) + return NULL;
for(i=0; i<16; i++) cnt += sprintf(md5str + cnt, "%02x", buffer[i]); @@ -190,6 +192,8 @@ md5_stream(fd, &buffer);
md5str = (char*) calloc(32 + 1, sizeof(char)); + if(!md5str) + return NULL;
for(i=0; i<16; i++) cnt += sprintf(md5str + cnt, "%02x", buffer[i]); @@ -211,6 +215,8 @@ memcpy(oldmd5buff, md5buff, 16);
md5str = (char*) cli_calloc(32 + 1, sizeof(char)); + if(!md5str) + return NULL;
for(i=0; i<16; i++) cnt += sprintf(md5str + cnt, "%02x", md5buff[i]); @@ -332,6 +338,8 @@ if(dent->d_ino) { if(strcmp(dent->d_name, ".") && strcmp(dent->d_name, "..")) { fname = cli_calloc(strlen(dirname) + strlen(dent->d_name) + 2, sizeof(char)); + if(!fname) + return 0; sprintf(fname, "%s/%s", dirname, dent->d_name);
/* stat the file */ diff -ur --exclude=*config* clamav-devel-jm4/libclamav/readdb.c clamav-devel.jm-pl4/libclamav/readdb.c --- clamav-devel-jm4/libclamav/readdb.c Thu May 13 13:12:18 2004 +++ clamav-devel.jm-pl4/libclamav/readdb.c Thu May 13 13:08:29 2004 @@ -295,9 +295,16 @@ if(dent->d_ino) { if(strcmp(dent->d_name, ".") && strcmp(dent->d_name, "..") && (cli_strbcasestr(dent->d_name, ".db") || cli_strbcasestr(dent->d_name, ".db2") || cli_strbcasestr(dent->d_name, ".cvd"))) {
+ void * p = NULL; + dbstat->no++; - dbstat->stattab = (struct stat *) realloc(dbstat->stattab, dbstat->no * sizeof(struct stat)); + p = (struct stat *) realloc(dbstat->stattab, dbstat->no * sizeof(struct stat)); + if(!p) + return CL_EMEM; + dbstat->stattab = p; fname = cli_calloc(strlen(dirname) + strlen(dent->d_name) + 2, sizeof(char)); + if(!fname) + return CL_EMEM; sprintf(fname, "%s/%s", dirname, dent->d_name); stat(fname, &dbstat->stattab[dbstat->no - 1]); free(fname); @@ -335,6 +342,8 @@ if(strcmp(dent->d_name, ".") && strcmp(dent->d_name, "..") && (cli_strbcasestr(dent->d_name, ".db") || cli_strbcasestr(dent->d_name, ".db2") || cli_strbcasestr(dent->d_name, ".cvd"))) {
fname = cli_calloc(strlen(dbstat->dir) + strlen(dent->d_name) + 2, sizeof(char));
+ if(!fname)
+ return CL_EMEM;
sprintf(fname, "%s/%s", dbstat->dir, dent->d_name);
stat(fname, &sb);
free(fname);
diff -ur --exclude=*config* clamav-devel-jm4/libclamav/scanners.c clamav-devel.jm-pl4/libclamav/scanners.c
--- clamav-devel-jm4/libclamav/scanners.c Thu May 13 13:12:35 2004
+++ clamav-devel.jm-pl4/libclamav/scanners.c Thu May 13 13:08:29 2004
@@ -722,6 +722,10 @@
if(strcmp(dent->d_name, ".") && strcmp(dent->d_name, "..")) {
/* build the full name */
fname = cli_calloc(strlen(dirname) + strlen(dent->d_name) + 2, sizeof(char));
+ if(!fname) {
+ closedir(dd); + return(CL_EMEM);
+ }
sprintf(fname, "%s/%s", dirname, dent->d_name);
/* stat the file */ @@ -769,6 +773,10 @@
for(i = 0; i < vba_project->count; i++) { fullname = (char *) cli_malloc(strlen(vba_project->dir) + strlen(vba_project->name[i]) + 2); + if(!fullname) { + ret = CL_EMEM; + break; + } sprintf(fullname, "%s/%s", vba_project->dir, vba_project->name[i]); fd = open(fullname, O_RDONLY); if(fd == -1) { @@ -804,6 +812,10 @@ } else if ((vba_project = (vba_project_t *) wm_dir_read(dirname))) { for (i = 0; i < vba_project->count; i++) { fullname = (char *) cli_malloc(strlen(vba_project->dir) + strlen(vba_project->name[i]) + 2); + if(!fullname) { + ret = CL_EMEM; + break; + } sprintf(fullname, "%s/%s", vba_project->dir, vba_project->name[i]); fd = open(fullname, O_RDONLY); if(fd == -1) { @@ -847,6 +859,10 @@ if(strcmp(dent->d_name, ".") && strcmp(dent->d_name, "..")) { /* build the full name */ fname = cli_calloc(strlen(dirname) + strlen(dent->d_name) + 2, sizeof(char)); + if(!fname) { + closedir(dd); + return CL_EMEM; + } sprintf(fname, "%s/%s", dirname, dent->d_name);
/* stat the file */ diff -ur --exclude=*config* clamav-devel-jm4/libclamav/str.c clamav-devel.jm-pl4/libclamav/str.c --- clamav-devel-jm4/libclamav/str.c Thu May 13 13:12:18 2004 +++ clamav-devel.jm-pl4/libclamav/str.c Thu May 13 13:08:29 2004 @@ -179,6 +179,8 @@ return NULL; } buffer = malloc(j-i+1); + if(!buffer) + return NULL; strncpy(buffer, line+i, j-i); buffer[j-i] = '\0';
diff -ur --exclude=*config* clamav-devel-jm4/libclamav/unrarlib.c clamav-devel.jm-pl4/libclamav/unrarlib.c
--- clamav-devel-jm4/libclamav/unrarlib.c Thu May 13 13:12:18 2004
+++ clamav-devel.jm-pl4/libclamav/unrarlib.c Thu May 13 13:08:29 2004
@@ -553,6 +553,12 @@
if((void*)(*(DWORD*)list) == NULL) /* first entry */
{
tmp_List = malloc(sizeof(ArchiveList_struct));
+ if(!tmp_List) {
+ fclose(ArcPtr);
+ free(UnpMemory);
+ return FALSE;
+ }
+ tmp_List->next = NULL;
(*(DWORD*)list) = (DWORD)tmp_List;
@@ -560,11 +566,24 @@
} else /* add entry */
{
tmp_List->next = malloc(sizeof(ArchiveList_struct));
+ if(!tmp_List) {
+ fclose(ArcPtr);
+ free(UnpMemory);
+ return FALSE;
+ }
+ tmp_List = (ArchiveList_struct*) tmp_List->next;
tmp_List->next = NULL;
}
tmp_List->item.Name = malloc(NewLhd.NameSize + 1);
+ if(!tmp_List->item.Name) {
+ fclose(ArcPtr);
+ free(UnpMemory);
+ free(tmp_List);
+ return FALSE;
+ }
+ strcpy(tmp_List->item.Name, ArcFileName);
tmp_List->item.NameSize = NewLhd.NameSize;
tmp_List->item.PackSize = NewLhd.PackSize;
diff -ur --exclude=*config* clamav-devel-jm4/libclamav/vba_extract.c clamav-devel.jm-pl4/libclamav/vba_extract.c
--- clamav-devel-jm4/libclamav/vba_extract.c Thu May 13 13:12:18 2004
+++ clamav-devel.jm-pl4/libclamav/vba_extract.c Thu May 13 13:11:43 2004
@@ -219,9 +219,10 @@
continue;
}
buff = (unsigned char *) cli_malloc(10);
- if (cli_readn(fd, buff, 10) != 10) {
+ if (!buff || (cli_readn(fd, buff, 10) != 10) ) {
cli_errmsg("failed to read blob\n");
- free(buff);
+ if(buff)
+ free(buff);
free(name);
close(fd);
return FALSE;
@@ -269,6 +270,8 @@
cli_dbgmsg("in vba56_dir_read()\n");
fullname = (char *) cli_malloc(strlen(dir) + 15); + if(!fullname) + return NULL; sprintf(fullname, "%s/_VBA_PROJECT", dir); fd = open(fullname, O_RDONLY);
@@ -424,10 +427,23 @@ cli_dbgmsg("\nVBA Record count: %d\n", record_count); vba_project = (vba_project_t *) cli_malloc(sizeof(struct vba_project_tag)); + if(!vba_project) { + close(fd); + return NULL; + } vba_project->name = (char **) cli_malloc(sizeof(char *) * record_count); + if(vba_project->name) { + free(vba_project); + return NULL; + } vba_project->dir = strdup(dir); vba_project->offset = (uint32_t *) cli_malloc (sizeof(uint32_t) * record_count); + if(vba_project->offset) { + free(vba_project->name); + free(vba_project); + return NULL; + } vba_project->count = record_count; for (i=0 ; i < record_count ; i++) { if (cli_readn(fd, &length, 2) != 2) { @@ -524,10 +540,16 @@ { if (array->length == 0) { array->data = (unsigned char *) cli_malloc(len); + if(!array->data) + return; array->length = len; memcpy(array->data, src, len); } else { - array->data = realloc(array->data, array->length+len); + void * p = NULL; + p = realloc(array->data, array->length+len); + if(!p) + return; + array->data = p; memcpy(array->data+array->length, src, len); array->length += len; } @@ -1004,14 +1026,16 @@
offset_end += size; while (lseek(fd, 0, SEEK_CUR) < offset_end) { + macro_extname_t * p = NULL; + macro_extnames->count++; - macro_extnames->macro_extname = (macro_extname_t *) - cli_realloc(macro_extnames->macro_extname, + p = (macro_extname_t *) cli_realloc(macro_extnames->macro_extname, sizeof(macro_extname_t) * macro_extnames->count); - if (macro_extnames->macro_extname == NULL) { + if (p == NULL) { cli_dbgmsg("read macro_extnames failed\n"); goto abort;; } + macro_extnames->macro_extname = p;
macro_extname = ¯o_extnames->macro_extname[macro_extnames->count-1];
if (is_unicode) {
Only in clamav-devel.jm-pl4: target.h
------------------------------------------------------- This SF.Net email is sponsored by: SourceForge.net Broadband Sign-up now for SourceForge Broadband and get the fastest 6.0/768 connection for only $19.95/mo for the first 3 months! http://ads.osdn.com/?ad_id=2562&alloc_id=6184&op=click _______________________________________________ Clamav-devel mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/clamav-devel
