[prev in list] [next in list] [prev in thread] [next in thread]
List: clamav-devel
Subject: Re: [Clamav-devel] cli_malloc does NOT exit and MAY return NULL
From: Joe Maimon <jmaimon () ttec ! com>
Date: 2004-05-13 19:32:55
Message-ID: 40A3CD67.3000507 () ttec ! com
[Download RAW message or body]
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 = ¯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
Clamav-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/clamav-devel
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic