libclamav: add default.h

git-svn: trunk@4578
0.95
Tomasz Kojm 17 years ago
parent 188914fe8d
commit 589d8d8e99
  1. 4
      ChangeLog
  2. 3
      libclamav/Makefile.am
  3. 3
      libclamav/Makefile.in
  4. 7
      libclamav/filetypes.c
  5. 15
      libclamav/matcher-ac.c
  6. 3
      libclamav/matcher-ac.h
  7. 9
      libclamav/matcher.c
  8. 17
      libclamav/others.c
  9. 3
      libclamav/regex_list.c
  10. 5
      unit_tests/check_matchers.c

@ -1,3 +1,7 @@
Mon Dec 29 19:08:25 CET 2008 (tk)
---------------------------------
* libclamav: add default.h
Tue Dec 23 13:03:42 EET 2008 (edwin) Tue Dec 23 13:03:42 EET 2008 (edwin)
------------------------------------ ------------------------------------
* libclamav/pe.c, libclamav/special.c: reset resource type, * libclamav/pe.c, libclamav/special.c: reset resource type,

@ -260,7 +260,8 @@ libclamav_la_SOURCES = \
version.c\ version.c\
version.h\ version.h\
mpool.c\ mpool.c\
mpool.h mpool.h \
default.h
.PHONY: version.h.tmp .PHONY: version.h.tmp
version.lo: version.h version.lo: version.h

@ -559,7 +559,8 @@ libclamav_la_SOURCES = \
version.c\ version.c\
version.h\ version.h\
mpool.c\ mpool.c\
mpool.h mpool.h \
default.h
noinst_LTLIBRARIES = libclamav_internal_utils.la noinst_LTLIBRARIES = libclamav_internal_utils.la
COMMON_CLEANFILES = version.h version.h.tmp *.gcda *.gcno lzma/*.gcda lzma/*.gcno COMMON_CLEANFILES = version.h version.h.tmp *.gcda *.gcno lzma/*.gcda lzma/*.gcno

@ -37,6 +37,7 @@
#include "matcher-ac.h" #include "matcher-ac.h"
#include "str.h" #include "str.h"
#include "textdet.h" #include "textdet.h"
#include "default.h"
#include "htmlnorm.h" #include "htmlnorm.h"
#include "entconv.h" #include "entconv.h"
@ -164,7 +165,7 @@ cli_file_t cli_filetype2(int desc, const struct cl_engine *engine)
if(!root) if(!root)
return ret; return ret;
if(cli_ac_initdata(&mdata, root->ac_partsigs, root->ac_lsigs, AC_DEFAULT_TRACKLEN)) if(cli_ac_initdata(&mdata, root->ac_partsigs, root->ac_lsigs, CLI_DEFAULT_AC_TRACKLEN))
return ret; return ret;
sret = cli_ac_scanbuff(buff, bread, NULL, NULL, NULL, engine->root[0], &mdata, 0, ret, desc, NULL, AC_SCAN_FT, NULL); sret = cli_ac_scanbuff(buff, bread, NULL, NULL, NULL, engine->root[0], &mdata, 0, ret, desc, NULL, AC_SCAN_FT, NULL);
@ -174,7 +175,7 @@ cli_file_t cli_filetype2(int desc, const struct cl_engine *engine)
if(sret >= CL_TYPENO) { if(sret >= CL_TYPENO) {
ret = sret; ret = sret;
} else { } else {
if(cli_ac_initdata(&mdata, root->ac_partsigs, root->ac_lsigs, AC_DEFAULT_TRACKLEN)) if(cli_ac_initdata(&mdata, root->ac_partsigs, root->ac_lsigs, CLI_DEFAULT_AC_TRACKLEN))
return ret; return ret;
decoded = (unsigned char *) cli_utf16toascii((char *) buff, bread); decoded = (unsigned char *) cli_utf16toascii((char *) buff, bread);
@ -209,7 +210,7 @@ cli_file_t cli_filetype2(int desc, const struct cl_engine *engine)
* (just eliminating zeros and matching would introduce false positives */ * (just eliminating zeros and matching would introduce false positives */
if(encoding_normalize_toascii(&in_area, encoding, &out_area) >= 0 && out_area.length > 0) { if(encoding_normalize_toascii(&in_area, encoding, &out_area) >= 0 && out_area.length > 0) {
out_area.buffer[out_area.length] = '\0'; out_area.buffer[out_area.length] = '\0';
if(cli_ac_initdata(&mdata, root->ac_partsigs, root->ac_lsigs, AC_DEFAULT_TRACKLEN)) if(cli_ac_initdata(&mdata, root->ac_partsigs, root->ac_lsigs, CLI_DEFAULT_AC_TRACKLEN))
return ret; return ret;
if(out_area.length > 0) { if(out_area.length > 0) {

@ -40,6 +40,7 @@
#include "cltypes.h" #include "cltypes.h"
#include "str.h" #include "str.h"
#include "readdb.h" #include "readdb.h"
#include "default.h"
#include "mpool.h" #include "mpool.h"
@ -933,7 +934,7 @@ int cli_ac_scanbuff(const unsigned char *buffer, uint32_t length, const char **v
return CL_EMEM; return CL_EMEM;
} }
mdata->offmatrix[pt->sigid - 1][0] = cli_malloc(pt->parts * (AC_DEFAULT_TRACKLEN + 1) * sizeof(int32_t)); mdata->offmatrix[pt->sigid - 1][0] = cli_malloc(pt->parts * (CLI_DEFAULT_AC_TRACKLEN + 1) * sizeof(int32_t));
if(!mdata->offmatrix[pt->sigid - 1][0]) { if(!mdata->offmatrix[pt->sigid - 1][0]) {
cli_errmsg("cli_ac_scanbuff: Can't allocate memory for mdata->offmatrix[%u][0]\n", pt->sigid - 1); cli_errmsg("cli_ac_scanbuff: Can't allocate memory for mdata->offmatrix[%u][0]\n", pt->sigid - 1);
free(mdata->offmatrix[pt->sigid - 1]); free(mdata->offmatrix[pt->sigid - 1]);
@ -942,10 +943,10 @@ int cli_ac_scanbuff(const unsigned char *buffer, uint32_t length, const char **v
free(info.exeinfo.section); free(info.exeinfo.section);
return CL_EMEM; return CL_EMEM;
} }
memset(mdata->offmatrix[pt->sigid - 1][0], -1, pt->parts * (AC_DEFAULT_TRACKLEN + 1) * sizeof(int32_t)); memset(mdata->offmatrix[pt->sigid - 1][0], -1, pt->parts * (CLI_DEFAULT_AC_TRACKLEN + 1) * sizeof(int32_t));
mdata->offmatrix[pt->sigid - 1][0][0] = 0; mdata->offmatrix[pt->sigid - 1][0][0] = 0;
for(j = 1; j < pt->parts; j++) { for(j = 1; j < pt->parts; j++) {
mdata->offmatrix[pt->sigid - 1][j] = mdata->offmatrix[pt->sigid - 1][0] + j * (AC_DEFAULT_TRACKLEN + 1); mdata->offmatrix[pt->sigid - 1][j] = mdata->offmatrix[pt->sigid - 1][0] + j * (CLI_DEFAULT_AC_TRACKLEN + 1);
mdata->offmatrix[pt->sigid - 1][j][0] = 0; mdata->offmatrix[pt->sigid - 1][j][0] = 0;
} }
} }
@ -953,7 +954,7 @@ int cli_ac_scanbuff(const unsigned char *buffer, uint32_t length, const char **v
if(pt->partno != 1) { if(pt->partno != 1) {
found = 0; found = 0;
for(j = 1; j <= AC_DEFAULT_TRACKLEN && offmatrix[pt->partno - 2][j] != -1; j++) { for(j = 1; j <= CLI_DEFAULT_AC_TRACKLEN && offmatrix[pt->partno - 2][j] != -1; j++) {
found = 1; found = 1;
if(pt->maxdist) if(pt->maxdist)
if(realoff - offmatrix[pt->partno - 2][j] > pt->maxdist) if(realoff - offmatrix[pt->partno - 2][j] > pt->maxdist)
@ -969,7 +970,7 @@ int cli_ac_scanbuff(const unsigned char *buffer, uint32_t length, const char **v
} }
if(pt->partno == 1 || (found && (pt->partno != pt->parts))) { if(pt->partno == 1 || (found && (pt->partno != pt->parts))) {
offmatrix[pt->partno - 1][0] %= AC_DEFAULT_TRACKLEN; offmatrix[pt->partno - 1][0] %= CLI_DEFAULT_AC_TRACKLEN;
offmatrix[pt->partno - 1][0]++; offmatrix[pt->partno - 1][0]++;
offmatrix[pt->partno - 1][offmatrix[pt->partno - 1][0]] = offset + matchend; offmatrix[pt->partno - 1][offmatrix[pt->partno - 1][0]] = offset + matchend;
@ -990,7 +991,7 @@ int cli_ac_scanbuff(const unsigned char *buffer, uint32_t length, const char **v
type = pt->type; type = pt->type;
if(ftoffset && (!*ftoffset || (*ftoffset)->cnt < MAX_EMBEDDED_OBJ || type == CL_TYPE_ZIPSFX) && ((ftype == CL_TYPE_MSEXE && type >= CL_TYPE_SFX) || ((ftype == CL_TYPE_MSEXE || ftype == CL_TYPE_ZIP || ftype == CL_TYPE_MSOLE2) && type == CL_TYPE_MSEXE))) { if(ftoffset && (!*ftoffset || (*ftoffset)->cnt < MAX_EMBEDDED_OBJ || type == CL_TYPE_ZIPSFX) && ((ftype == CL_TYPE_MSEXE && type >= CL_TYPE_SFX) || ((ftype == CL_TYPE_MSEXE || ftype == CL_TYPE_ZIP || ftype == CL_TYPE_MSOLE2) && type == CL_TYPE_MSEXE))) {
/* FIXME: we don't know which offset of the first part is the correct one */ /* FIXME: we don't know which offset of the first part is the correct one */
for(j = 1; j <= AC_DEFAULT_TRACKLEN && offmatrix[0][j] != -1; j++) { for(j = 1; j <= CLI_DEFAULT_AC_TRACKLEN && offmatrix[0][j] != -1; j++) {
if(ac_addtype(ftoffset, type, offmatrix[pt->parts - 1][j], ctx)) { if(ac_addtype(ftoffset, type, offmatrix[pt->parts - 1][j], ctx)) {
if(info.exeinfo.section) if(info.exeinfo.section)
free(info.exeinfo.section); free(info.exeinfo.section);
@ -999,7 +1000,7 @@ int cli_ac_scanbuff(const unsigned char *buffer, uint32_t length, const char **v
} }
} }
memset(offmatrix[0], -1, pt->parts * (AC_DEFAULT_TRACKLEN + 1) * sizeof(int32_t)); memset(offmatrix[0], -1, pt->parts * (CLI_DEFAULT_AC_TRACKLEN + 1) * sizeof(int32_t));
for(j = 0; j < pt->parts; j++) for(j = 0; j < pt->parts; j++)
offmatrix[j][0] = 0; offmatrix[j][0] = 0;
} }

@ -26,9 +26,6 @@
#include "filetypes.h" #include "filetypes.h"
#include "cltypes.h" #include "cltypes.h"
#define AC_DEFAULT_MIN_DEPTH 2
#define AC_DEFAULT_MAX_DEPTH 3
#define AC_DEFAULT_TRACKLEN 8
#define AC_CH_MAXDIST 32 #define AC_CH_MAXDIST 32
#define AC_SCAN_VIR 1 #define AC_SCAN_VIR 1

@ -43,6 +43,7 @@
#include "special.h" #include "special.h"
#include "str.h" #include "str.h"
#include "cltypes.h" #include "cltypes.h"
#include "default.h"
int cli_scanbuff(const unsigned char *buffer, uint32_t length, cli_ctx *ctx, cli_file_t ftype) int cli_scanbuff(const unsigned char *buffer, uint32_t length, cli_ctx *ctx, cli_file_t ftype)
@ -72,7 +73,7 @@ int cli_scanbuff(const unsigned char *buffer, uint32_t length, cli_ctx *ctx, cli
if(troot) { if(troot) {
if((ret = cli_ac_initdata(&mdata, troot->ac_partsigs, troot->ac_lsigs, AC_DEFAULT_TRACKLEN))) if((ret = cli_ac_initdata(&mdata, troot->ac_partsigs, troot->ac_lsigs, CLI_DEFAULT_AC_TRACKLEN)))
return ret; return ret;
if(troot->ac_only || (ret = cli_bm_scanbuff(buffer, length, virname, troot, 0, ftype, -1)) != CL_VIRUS) if(troot->ac_only || (ret = cli_bm_scanbuff(buffer, length, virname, troot, 0, ftype, -1)) != CL_VIRUS)
@ -84,7 +85,7 @@ int cli_scanbuff(const unsigned char *buffer, uint32_t length, cli_ctx *ctx, cli
return ret; return ret;
} }
if((ret = cli_ac_initdata(&mdata, groot->ac_partsigs, groot->ac_lsigs, AC_DEFAULT_TRACKLEN))) if((ret = cli_ac_initdata(&mdata, groot->ac_partsigs, groot->ac_lsigs, CLI_DEFAULT_AC_TRACKLEN)))
return ret; return ret;
if(groot->ac_only || (ret = cli_bm_scanbuff(buffer, length, virname, groot, 0, ftype, -1)) != CL_VIRUS) if(groot->ac_only || (ret = cli_bm_scanbuff(buffer, length, virname, groot, 0, ftype, -1)) != CL_VIRUS)
@ -297,11 +298,11 @@ int cli_scandesc(int desc, cli_ctx *ctx, cli_file_t ftype, uint8_t ftonly, struc
return CL_EMEM; return CL_EMEM;
} }
if(!ftonly && (ret = cli_ac_initdata(&gdata, groot->ac_partsigs, groot->ac_lsigs, AC_DEFAULT_TRACKLEN))) if(!ftonly && (ret = cli_ac_initdata(&gdata, groot->ac_partsigs, groot->ac_lsigs, CLI_DEFAULT_AC_TRACKLEN)))
return ret; return ret;
if(troot) { if(troot) {
if((ret = cli_ac_initdata(&tdata, troot->ac_partsigs, troot->ac_lsigs, AC_DEFAULT_TRACKLEN))) if((ret = cli_ac_initdata(&tdata, troot->ac_partsigs, troot->ac_lsigs, CLI_DEFAULT_AC_TRACKLEN)))
return ret; return ret;
} }

@ -76,6 +76,7 @@ static pthread_mutex_t cli_gentemp_mutex = PTHREAD_MUTEX_INITIALIZER;
#include "regex/regex.h" #include "regex/regex.h"
#include "ltdl.h" #include "ltdl.h"
#include "matcher-ac.h" #include "matcher-ac.h"
#include "default.h"
#ifndef O_BINARY #ifndef O_BINARY
#define O_BINARY 0 #define O_BINARY 0
@ -214,17 +215,17 @@ struct cl_engine *cl_engine_new(void)
} }
/* Setup default limits */ /* Setup default limits */
new->maxscansize = 104857600; new->maxscansize = CLI_DEFAULT_MAXSCANSIZE;
new->maxfilesize = 26214400; new->maxfilesize = CLI_DEFAULT_MAXFILESIZE;
new->maxreclevel = 16; new->maxreclevel = CLI_DEFAULT_MAXRECLEVEL;
new->maxfiles = 10000; new->maxfiles = CLI_DEFAULT_MAXFILES;
new->min_cc_count = 3; new->min_cc_count = CLI_DEFAULT_MIN_CC_COUNT;
new->min_ssn_count = 3; new->min_ssn_count = CLI_DEFAULT_MIN_SSN_COUNT;
new->refcount = 1; new->refcount = 1;
new->ac_only = 0; new->ac_only = 0;
new->ac_mindepth = AC_DEFAULT_MIN_DEPTH; new->ac_mindepth = CLI_DEFAULT_AC_MINDEPTH;
new->ac_maxdepth = AC_DEFAULT_MAX_DEPTH; new->ac_maxdepth = CLI_DEFAULT_AC_MAXDEPTH;
#ifdef USE_MPOOL #ifdef USE_MPOOL
if(!(new->mempool = mp_create())) { if(!(new->mempool = mp_create())) {

@ -53,6 +53,7 @@
#include "readdb.h" #include "readdb.h"
#include "jsparse/textbuf.h" #include "jsparse/textbuf.h"
#include "regex_suffix.h" #include "regex_suffix.h"
#include "default.h"
#include "mpool.h" #include "mpool.h"
@ -287,7 +288,7 @@ int regex_list_match(struct regex_matcher* matcher,char* real_url,const char* di
buffer[buffer_len]=0; buffer[buffer_len]=0;
cli_dbgmsg("Looking up in regex_list: %s\n", buffer); cli_dbgmsg("Looking up in regex_list: %s\n", buffer);
if((rc = cli_ac_initdata(&mdata, 0, 0, AC_DEFAULT_TRACKLEN))) if((rc = cli_ac_initdata(&mdata, 0, 0, CLI_DEFAULT_AC_TRACKLEN)))
return rc; return rc;
bufrev = cli_strdup(buffer); bufrev = cli_strdup(buffer);

@ -30,6 +30,7 @@
#include "../libclamav/matcher.h" #include "../libclamav/matcher.h"
#include "../libclamav/matcher-ac.h" #include "../libclamav/matcher-ac.h"
#include "../libclamav/matcher-bm.h" #include "../libclamav/matcher-bm.h"
#include "../libclamav/default.h"
#include "checks.h" #include "checks.h"
static const struct ac_testdata_s { static const struct ac_testdata_s {
@ -64,7 +65,7 @@ START_TEST (test_ac_scanbuff) {
#ifdef USE_MPOOL #ifdef USE_MPOOL
root->mempool = mp_create(); root->mempool = mp_create();
#endif #endif
ret = cli_ac_init(root, AC_DEFAULT_MIN_DEPTH, AC_DEFAULT_MAX_DEPTH); ret = cli_ac_init(root, CLI_DEFAULT_AC_MINDEPTH, CLI_DEFAULT_AC_MAXDEPTH);
fail_unless(ret == CL_SUCCESS, "cli_ac_init() failed"); fail_unless(ret == CL_SUCCESS, "cli_ac_init() failed");
for(i = 0; ac_testdata[i].data; i++) { for(i = 0; ac_testdata[i].data; i++) {
@ -75,7 +76,7 @@ START_TEST (test_ac_scanbuff) {
ret = cli_ac_buildtrie(root); ret = cli_ac_buildtrie(root);
fail_unless(ret == CL_SUCCESS, "cli_ac_buildtrie() failed"); fail_unless(ret == CL_SUCCESS, "cli_ac_buildtrie() failed");
ret = cli_ac_initdata(&mdata, root->ac_partsigs, 0, AC_DEFAULT_TRACKLEN); ret = cli_ac_initdata(&mdata, root->ac_partsigs, 0, CLI_DEFAULT_AC_TRACKLEN);
fail_unless(ret == CL_SUCCESS, "cli_ac_initdata() failed"); fail_unless(ret == CL_SUCCESS, "cli_ac_initdata() failed");
for(i = 0; ac_testdata[i].data; i++) { for(i = 0; ac_testdata[i].data; i++) {

Loading…
Cancel
Save