diff --git a/libclamav/scanners.c b/libclamav/scanners.c index 2b709324a..3bdd11bab 100644 --- a/libclamav/scanners.c +++ b/libclamav/scanners.c @@ -3476,9 +3476,25 @@ static int scan_common(int desc, cl_fmap_t *map, const char **virname, unsigned rc = CL_EMEM; } else { - cli_bytecode_context_setctx(bc_ctx, &ctx); - rc = cli_bytecode_runhook(&ctx, ctx.engine, bc_ctx, BC_PRECLASS, map); - cli_bytecode_context_destroy(bc_ctx); + fmap_t *pc_map = map; + + if (!pc_map) { + perf_start(&ctx, PERFT_MAP); + if(!(pc_map = fmap(desc, 0, sb.st_size))) { + perf_stop(&ctx, PERFT_MAP); + rc = CL_EMEM; + } + perf_stop(&ctx, PERFT_MAP); + } + + if (pc_map) { + cli_bytecode_context_setctx(bc_ctx, &ctx); + rc = cli_bytecode_runhook(&ctx, ctx.engine, bc_ctx, BC_PRECLASS, pc_map); + cli_bytecode_context_destroy(bc_ctx); + + if (!map) + funmap(pc_map); + } } //ctx.options &= ~CL_SCAN_FILE_PROPERTIES; //rc = cli_mem_scandesc(jstring, strlen(jstring), &ctx);