Never mind,

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 = &macro_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

Reply via email to