small update

git-svn-id: file:///var/lib/svn/clamav-devel/branches/mpool@4267 77e5149b-7576-45b1-b177-96237e5ba77b
0.95
aCaB 17 years ago
parent b94e66c486
commit b583d6ed27
  1. 12
      libclamav/TODO
  2. 9
      libclamav/matcher-ac.c
  3. 61
      libclamav/readdb.c

@ -0,0 +1,12 @@
TBD
- engine->root[x]->ac_lsigtable and childreen
- engine->md5_hdb
- engine->md5_mdb + soff + md5_sizes
- engine->md5_fp
- engine->zip_mlist
- engine->rar_mlist
- engine->phishcheck and friends (free only?)
- engine->pua_cats
- engine->ftypes
- engine->ignored

@ -1536,6 +1536,7 @@ int cli_ac_addsig(struct cli_matcher *root, const char *virname, const char *hex
unsigned int mpoolvirnamesz = strlen(mpoolvirname) + 1;
if((new->virname = mpool_alloc(root->mempool, mpoolvirnamesz, NULL)) != NULL)
memcpy(new->virname, mpoolvirname, mpoolvirnamesz);
free(mpoolvirname);
} else new->virname = NULL;
}
#else
@ -1559,12 +1560,8 @@ int cli_ac_addsig(struct cli_matcher *root, const char *virname, const char *hex
if(offset) {
#ifdef USE_MPOOL
char *mpooloffset = cli_strdup(offset);
if(mpooloffset) {
unsigned int mpooloffsetsz = strlen(mpooloffset) + 1;
if((new->offset = mpool_alloc(root->mempool, mpooloffsetsz, NULL)))
memcpy(new->offset, mpooloffset, mpooloffsetsz);
} else new->offset = NULL;
if((new->offset = mpool_alloc(root->mempool, strlen(mpooloffset) + 1, NULL)))
strcpy(new->offset, offset);
#else
new->offset = cli_strdup(offset);
#endif

@ -283,29 +283,78 @@ int cli_parse_add(struct cli_matcher *root, const char *virname, const char *hex
}
} else {
#ifdef USE_MPOOL
bm_new = (struct cli_bm_patt *) mpool_calloc(root->mempool, 1, sizeof(struct cli_bm_patt));
#else
bm_new = (struct cli_bm_patt *) cli_calloc(1, sizeof(struct cli_bm_patt));
#endif
if(!bm_new)
return CL_EMEM;
if(!(bm_new->pattern = (unsigned char *) cli_hex2str(hexsig))) {
#ifdef USE_MPOOL
{
unsigned char *mpoolhexsig = (unsigned char *) cli_hex2str(hexsig);
if(mpoolhexsig) {
unsigned int mpoolhexsigsz = strlen(hexsig) / 2 + 1;
if((bm_new->pattern = mpool_alloc(root->mempool, mpoolhexsigsz, NULL)))
memcpy(bm_new->pattern, mpoolhexsig, mpoolhexsigsz);
free(mpoolhexsig);
} else bm_new->pattern = NULL;
}
#else
bm_new->pattern = (unsigned char *) cli_hex2str(hexsig)
#end
if(!bm_new->pattern) {
#ifdef USE_MPOOL
mpool_free(root->mempool, bm_new);
#else
free(bm_new);
#endif
return CL_EMALFDB;
}
bm_new->length = strlen(hexsig) / 2;
#ifdef USE_MPOOL
{
char *mpoolvirname = cli_virname((char *) virname, options & CL_DB_OFFICIAL, 0);
if(mpoolvirname) {
unsigned int mpoolvirnamesz = strlen(mpoolvirname) + 1;
if((bm_new->virname = mpool_alloc(root->mempool, mpoolvirnamesz, NULL)))
memcpy(bm_new->virname, mpoolvirname, mpoolvirname);
free(mpoolvirname);
} else bm_new->virname = NULL;
}
#else
bm_new->virname = cli_virname((char *) virname, options & CL_DB_OFFICIAL, 0);
#end
if(!bm_new->virname) {
#ifdef USE_MPOOL
mpool_free(root->mempool, bm_new->pattern);
mpool_free(root->mempool, bm_new);
#else
free(bm_new->pattern);
free(bm_new);
#endif
return CL_EMEM;
}
if(offset) {
#ifdef USE_MPOOL
if((bm_new->offset = mpool_alloc(root->mempool, streln(offset) + 1, NULL)))
strcpy(bm_new->offset, offset);
#else
bm_new->offset = cli_strdup(offset);
#endif
if(!bm_new->offset) {
#ifdef USE_MPOOL
mpool_free(root->mempool, bm_new->pattern);
mpool_free(root->mempool, bm_new->virname);
mpool_free(root->mempool, bm_new);
#else
free(bm_new->pattern);
free(bm_new->virname);
free(bm_new);
#endif
return CL_EMEM;
}
}
@ -317,9 +366,15 @@ int cli_parse_add(struct cli_matcher *root, const char *virname, const char *hex
if((ret = cli_bm_addpatt(root, bm_new))) {
cli_errmsg("cli_parse_add(): Problem adding signature (4).\n");
#ifdef USE_MPOOL
mpool_free(root->mempool, bm_new->pattern);
mpool_free(root->mempool, bm_new->virname);
mpool_free(root->mempool, bm_new);
#else
free(bm_new->pattern);
free(bm_new->virname);
free(bm_new);
#endif
return ret;
}
}
@ -2147,6 +2202,9 @@ void cl_free(struct cl_engine *engine)
pthread_mutex_unlock(&cli_ref_mutex);
#endif
#ifdef USE_MPOOL
if(engine->mempool) mpool_close(engine->mempool);
#else
if(engine->root) {
for(i = 0; i < CLI_MTARGETS; i++) {
if((root = engine->root[i])) {
@ -2217,6 +2275,7 @@ void cl_free(struct cl_engine *engine)
cli_ftfree(engine->ftypes);
cli_freeign(engine);
#endif /* USE_MPOOL */
free(engine);
}

Loading…
Cancel
Save