[Pkg-clamav-commits] [SCM] Debian repository for ClamAV branch, debian/unstable, updated. debian/0.95+dfsg-1-6156-g094ec9b

Török Edvin edwin at clamav.net
Sun Apr 4 01:02:23 UTC 2010


The following commit has been merged in the debian/unstable branch:
commit 3b33bd6830d94e28f7d0721023b3425706975302
Author: Török Edvin <edwin at clamav.net>
Date:   Thu Aug 27 18:12:39 2009 +0300

    Minimal LLVM codegen.

diff --git a/clambc/bcrun.c b/clambc/bcrun.c
index 4f6b092..1926ba7 100644
--- a/clambc/bcrun.c
+++ b/clambc/bcrun.c
@@ -50,7 +50,7 @@ int main(int argc, char *argv[])
     FILE *f;
     struct cli_bc *bc;
     struct cli_bc_ctx *ctx;
-    int rc;
+    int rc, dbgargc;
     struct optstruct *opts;
     unsigned funcid=0, i;
     struct cli_all_bc bcs;
@@ -92,6 +92,11 @@ int main(int argc, char *argv[])
 	exit(4);
     }
 
+    dbgargc=1;
+    while (opts->filename[dbgargc]) dbgargc++;
+
+    if (dbgargc > 1)
+	cli_bytecode_debug(dbgargc, opts->filename);
     rc = cli_bytecode_init(&bcs);
     if (rc != CL_SUCCESS) {
 	fprintf(stderr,"Unable to init bytecode engine: %s\n", cl_strerror(rc));
diff --git a/libclamav/bytecode.c b/libclamav/bytecode.c
index 8c3a586..1b8278a 100644
--- a/libclamav/bytecode.c
+++ b/libclamav/bytecode.c
@@ -666,6 +666,7 @@ static int parseFunctionHeader(struct cli_bc *bc, unsigned fn, unsigned char *bu
     }
     offset = 1;
     func->numArgs = readFixedNumber(buffer, &offset, len, &ok, 1);
+    func->returnType = readTypeID(bc, buffer, &offset, len, &ok);
     if (buffer[offset] != 'L') {
 	cli_errmsg("Invalid function locals header: %c\n", buffer[offset]);
 	return CL_EMALFDB;
@@ -1237,3 +1238,4 @@ int cli_bytecode_done(struct cli_all_bc *allbc)
 {
     return cli_bytecode_done_jit(allbc);
 }
+
diff --git a/libclamav/bytecode2llvm.cpp b/libclamav/bytecode2llvm.cpp
index ebb29be..b8ddb92 100644
--- a/libclamav/bytecode2llvm.cpp
+++ b/libclamav/bytecode2llvm.cpp
@@ -21,18 +21,26 @@
  */
 
 #include "llvm/ADT/DenseMap.h"
+#include "llvm/DerivedTypes.h"
+#include "llvm/Function.h"
+#include "llvm/ExecutionEngine/ExecutionEngine.h"
+#include "llvm/ExecutionEngine/JIT.h"
+#include "llvm/ExecutionEngine/JITEventListener.h"
+#include "llvm/LLVMContext.h"
+#include "llvm/Module.h"
+#include "llvm/ModuleProvider.h"
+#include "llvm/Support/Compiler.h"
+#include "llvm/Support/CommandLine.h"
 #include "llvm/Support/DataTypes.h"
-#include "llvm/System/Threading.h"
 #include "llvm/Support/ErrorHandling.h"
 #include "llvm/Support/ManagedStatic.h"
 #include "llvm/Support/raw_ostream.h"
-#include "llvm/ExecutionEngine/ExecutionEngine.h"
-#include "llvm/ExecutionEngine/JIT.h"
-#include "llvm/LLVMContext.h"
+#include "llvm/Support/IRBuilder.h"
+#include "llvm/Support/PrettyStackTrace.h"
 #include "llvm/System/Signals.h"
+#include "llvm/System/Threading.h"
 #include "llvm/Target/TargetSelect.h"
-#include "llvm/Module.h"
-#include "llvm/ModuleProvider.h"
+#include "llvm/Support/TargetFolder.h"
 #include <cstdlib>
 #include <new>
 
@@ -48,38 +56,151 @@ typedef DenseMap<const struct cli_bc_func*, void*> FunctionMapTy;
 struct cli_bcengine {
     ExecutionEngine *EE;
     LLVMContext Context;
-    FunctionMapTy compiledFunctions; 
+    FunctionMapTy compiledFunctions;
 };
 
 namespace {
 
-    void do_shutdown() {
-	llvm_shutdown();
-    }
-    void llvm_error_handler(void *user_data, const std::string &reason)
-    {
-    
-    }
+void do_shutdown() {
+    llvm_shutdown();
+}
 
-    void generateLLVM(const struct cli_bc *bc, Module *M, 
-		      FunctionMapTy &compiledFunctions) {
+void llvm_error_handler(void *user_data, const std::string &reason)
+{
+    errs() << reason;
+    //TODO: better error handling, don't exit here
+    exit(1);
+}
 
-	Type *TypeMap = new Type*[bc->num_types];
+class VISIBILITY_HIDDEN LLVMCodegen {
+private:
+    const struct cli_bc *bc;
+    Module *M;
+    LLVMContext &Context;
+    FunctionMapTy &compiledFunctions;
+    const Type **TypeMap;
+    Twine BytecodeID;
+    ExecutionEngine *EE;
 
+    const Type *mapType(uint16_t ty)
+    {
+	if (!ty)
+	    return Type::getVoidTy(Context);
+	if (ty < 64)
+	    return IntegerType::get(Context, ty);
+	switch (ty) {
+	    case 65:
+		return PointerType::getUnqual(Type::getInt8Ty(Context));
+	    case 66:
+		return PointerType::getUnqual(Type::getInt16Ty(Context));
+	    case 67:
+		return PointerType::getUnqual(Type::getInt32Ty(Context));
+	    case 68:
+		return PointerType::getUnqual(Type::getInt64Ty(Context));
+	}
+	ty -= 69;
+	// This was validated by libclamav already.
+	assert(ty < bc->num_types && "Out of range type ID");
+	return TypeMap[ty];
+    }
+
+    void convertTypes() {
 	for (unsigned j=0;j<bc->num_types;j++) {
 
 	}
+    }
+
+    Value *convertOperand(const struct cli_bc_func *func, 
+			  const struct cli_bc_inst *inst,  operand_t operand)
+    {
+	if (operand >= func->numValues) {
+	    // Constant
+	    operand -= func->numValues;
+	    // This was already validated by libclamav.
+	    assert(operand < func->numConstants && "Constant out of range");
+	    uint64_t *c = &func->constants[operand-func->numValues];
+	    uint64_t v;
+	    const Type *Ty;
+	    switch (inst->interp_op%5) {
+		case 0:
+		case 1:
+		    Ty = (inst->interp_op%5) ? Type::getInt8Ty(Context) : 
+			Type::getInt1Ty(Context);
+		    v = *(uint8_t*)c;
+		    break;
+		case 2:
+		    Ty = Type::getInt16Ty(Context);
+		    v = *(uint16_t*)c;
+		    break;
+		case 3:
+		    Ty = Type::getInt32Ty(Context);
+		    v = *(uint32_t*)c;
+		    break;
+		case 4:
+		    Ty = Type::getInt64Ty(Context);
+		    v = *(uint64_t*)c;
+		    break;
+	    }
+	    return ConstantInt::get(Ty, v);
+	}
+	assert(0 && "Not implemented yet");
+    }
+public:
+    LLVMCodegen(const struct cli_bc *bc, Module *M, FunctionMapTy &cFuncs,
+		ExecutionEngine *EE)
+	: bc(bc), M(M), Context(M->getContext()), compiledFunctions(cFuncs), 
+	BytecodeID("bc"+Twine(bc->id)), EE(EE) {
+	    TypeMap = new const Type*[bc->num_types];
+    }
 
+    void generate() {
+	PrettyStackTraceString Trace(BytecodeID.str().c_str());
+	convertTypes();
+	TargetFolder Folder(EE->getTargetData(), Context);
+	IRBuilder<false, TargetFolder> Builder(Context, Folder);
 	for (unsigned j=0;j<bc->num_func;j++) {
+	    PrettyStackTraceString CrashInfo("Generate LLVM IR");
+	    // Create LLVM IR Function
 	    const struct cli_bc_func *func = &bc->funcs[j];
 	    std::vector<const Type*> argTypes;
 	    for (unsigned a=0;a<func->numArgs;a++) {
-		argTypes.push_back(mapType(func->types[a], TypeMap));
+		argTypes.push_back(mapType(func->types[a]));
+	    }
+	    const Type *RetTy = mapType(func->returnType);
+	    llvm::FunctionType *FTy =  FunctionType::get(RetTy, argTypes,
+							 false);
+	    Function *F = Function::Create(FTy, Function::InternalLinkage, 
+					   BytecodeID+"f"+Twine(j), M);
+
+	    // Create all BasicBlocks
+	    BasicBlock **BB = new BasicBlock*[func->numBB];
+	    for (unsigned i=0;i<func->numBB;i++) {
+		BB[i] = BasicBlock::Create(Context, "", F);
 	    }
+
+	    // Generate LLVM IR for each BB
+	    for (unsigned i=0;i<func->numBB;i++) {
+		const struct cli_bc_bb *bb = &func->BB[i];
+		Builder.SetInsertPoint(BB[i]);
+		for (unsigned j=0;j<bb->numInsts;j++) {
+		    const struct cli_bc_inst *inst = &bb->insts[i];
+
+		    switch (inst->opcode) {
+			case OP_RET:
+			    Value *V = convertOperand(func, inst, inst->u.unaryop);
+			    Builder.CreateRet(V);
+			    break;
+		    }
+		}
+	    }
+
+	    PrettyStackTraceString CrashInfo2("Native machine codegen");
+	    // Codegen current function as executable machine code.
+	    compiledFunctions[func] = EE->getPointerToFunction(F);
 	}
 	delete TypeMap;
     }
-
+};
 }
 
 int cli_vm_execute_jit(const struct cli_bc *bc, struct cli_bc_ctx *ctx, const struct cli_bc_func *func, const struct cli_bc_inst *inst)
@@ -113,8 +234,9 @@ int cli_bytecode_prepare_jit(struct cli_all_bc *bcs)
 	EE->DisableLazyCompilation();
 
 	for (unsigned i=0;i<bcs->count;i++) {
-	    const struct cli_bc *bc = bcs->all_bcs[i];
-	    generateLLVM(bc, M);
+	    const struct cli_bc *bc = &bcs->all_bcs[i];
+	    LLVMCodegen Codegen(bc, M, bcs->engine->compiledFunctions, EE);
+	    Codegen.generate();
 	}
 
 	// compile all functions now, not lazily!
@@ -151,7 +273,7 @@ int bytecode_init(void)
 // Called once when loading a new set of BC files
 int cli_bytecode_init_jit(struct cli_all_bc *bcs)
 {
-    bcs->engine = (struct cli_bcengine*) malloc(sizeof(struct cli_bcengine));
+    bcs->engine = new(std::nothrow) struct cli_bcengine;
     if (!bcs->engine)
 	return CL_EMEM;
     return 0;
@@ -165,3 +287,8 @@ int cli_bytecode_done_jit(struct cli_all_bc *bcs)
     bcs->engine = 0;
     return 0;
 }
+
+void cli_bytecode_debug(int argc, char **argv)
+{
+  cl::ParseCommandLineOptions(argc, argv);
+}
diff --git a/libclamav/bytecode_nojit.c b/libclamav/bytecode_nojit.c
index 1c73e9d..507208e 100644
--- a/libclamav/bytecode_nojit.c
+++ b/libclamav/bytecode_nojit.c
@@ -46,3 +46,7 @@ int cli_bytecode_done_jit(struct cli_all_bc *allbc)
 {
     return CL_SUCCESS;
 }
+
+void cli_bytecode_debug(int argc, char **argv) {
+  // Empty
+}
diff --git a/libclamav/bytecode_priv.h b/libclamav/bytecode_priv.h
index 8387971..635640e 100644
--- a/libclamav/bytecode_priv.h
+++ b/libclamav/bytecode_priv.h
@@ -77,6 +77,7 @@ struct cli_bc_func {
     uint32_t numConstants;
     uint32_t numBytes;/* stack size */
     uint16_t numBB;
+    uint16_t returnType;
     uint16_t *types;
     uint32_t insn_idx;
     struct cli_bc_bb *BB;
@@ -107,6 +108,7 @@ int cli_bytecode_prepare_jit(struct cli_all_bc *bc);
 int cli_bytecode_init_jit(struct cli_all_bc *bc);
 int cli_bytecode_done_jit(struct cli_all_bc *bc);
 int bytecode_init(void);
+void cli_bytecode_debug(int argc, char **argv);
 
 #ifdef __cplusplus
 }
diff --git a/libclamav/libclamav.map b/libclamav/libclamav.map
index 48f85be..5bc6daf 100644
--- a/libclamav/libclamav.map
+++ b/libclamav/libclamav.map
@@ -157,6 +157,7 @@ CLAMAV_PRIVATE {
     cli_bytecode_context_clear;
     cli_bytecode_init;
     cli_bytecode_done;
+    cli_bytecode_debug;
   local:
     *;
 };
diff --git a/libclamav/readdb.c b/libclamav/readdb.c
index 6aebed9..a91441b 100644
--- a/libclamav/readdb.c
+++ b/libclamav/readdb.c
@@ -270,8 +270,9 @@ int cli_parse_add(struct cli_matcher *root, const char *virname, const char *hex
 	    return CL_EMEM;
 	}
 
-	if(bm_new->length > root->maxpatlen)
+	if(bm_new->length > root->maxpatlen) {
 	    root->maxpatlen = bm_new->length;
+	}
 
 	if((ret = cli_bm_addpatt(root, bm_new, offset))) {
 	    cli_errmsg("cli_parse_add(): Problem adding signature (4).\n");
@@ -2152,7 +2153,7 @@ int cl_engine_compile(struct cl_engine *engine)
 	if((root = engine->root[i])) {
 	    if((ret = cli_ac_buildtrie(root)))
 		return ret;
-	    cli_dbgmsg("matcher[%u]: %s: AC sigs: %u (reloff: %u, absoff: %u) BM sigs: %u (reloff: %u, absoff: %u) %s\n", i, cli_mtargets[i].name, root->ac_patterns, root->ac_reloff_num, root->ac_absoff_num, root->bm_patterns, root->bm_reloff_num, root->bm_absoff_num, root->ac_only ? "(ac_only mode)" : "");
+	    cli_dbgmsg("matcher[%u]: %s: AC sigs: %u (reloff: %u, absoff: %u) BM sigs: %u (reloff: %u, absoff: %u) maxpatlen %u %s\n", i, cli_mtargets[i].name, root->ac_patterns, root->ac_reloff_num, root->ac_absoff_num, root->bm_patterns, root->bm_reloff_num, root->bm_absoff_num, root->maxpatlen, root->ac_only ? "(ac_only mode)" : "");
 	}
     }
 
diff --git a/unit_tests/input/apicalls.cbc b/unit_tests/input/apicalls.cbc
index ace9167..20d4a88 100644
--- a/unit_tests/input/apicalls.cbc
+++ b/unit_tests/input/apicalls.cbc
@@ -1,15 +1,15 @@
 ClamBCaa`|`````|`agafp`clamcoincidencejb
 Tedebfdacb`bb`bb`b
 Eabaaabbed|b`acflfifoebfcfaf`gifoedgefcgdgac``
-A`Lacb`baab`bFadaa
+A`b`bLacb`baab`bFadaa
 Bb`b``bbabHonnkm``odHm``oonnkdaaaadab`b`Hhgfedcbadb`babnaaaDm``odDmjnmdTcab`babE
-AaLabahaab`bFacaa
+Aab`bLabahaab`bFacaa
 Baaaadaah`Bgaab`babnaaaDm``odDmjnmdTcab`babE
-AaLabb`aaab`bFacaa
+Aab`bLabb`aaab`bFacaa
 Baaaadab`a`Dhbgabb`babnaaaDm``odDmjnmdTcab`babE
-AaLabb`baab`bFacaa
+Aab`bLabb`baab`bFacaa
 Baaaadab`b`Fichbgadb`babnaaaDm``odDmjnmdTcab`babE
-AaLabb`daab`bFacaa
+Aab`bLabb`daab`bFacaa
 Baaaadab`d`Ncgbfae`dichbgahb`babnaaaDm``odDmjnmdTcab`babE
-AbLadahb`aaaaaaab`bFaeaa
+Abb`bLadahb`aaaaaaab`bFaeaa
 Baaabdaah`Bhbaaaacdab`aaaDdcbabaaadk`acabb`baenaadDm``odDmjnmdTcab`baeE
diff --git a/unit_tests/input/arith.cbc b/unit_tests/input/arith.cbc
index 8cce84a..239723d 100644
--- a/unit_tests/input/arith.cbc
+++ b/unit_tests/input/arith.cbc
@@ -1,9 +1,9 @@
 ClamBCaa`|`````|`aebbep`clamcoincidencejb
 Ted
 E``
-A`Lbabb`bb`bb`bb`bb`bb`bb`bb`bb`bb`bb`bb`bb`bb`bb`bb`bb`bb`bb`bb`bb`bb`bb`bb`bb`bb`bb`bb`bb`bb`bb`bb`bb`bFbbbaa
+A`b`bLbabb`bb`bb`bb`bb`bb`bb`bb`bb`bb`bb`bb`bb`bb`bb`bb`bb`bb`bb`bb`bb`bb`bb`bb`bb`bb`bb`bb`bb`bb`bb`bb`bb`bFbbbaa
 Bb`b`oa`abb`baaoa`acb`baboa`adb`bacoa`aeb`badoa`afb`baeoa`agb`bafoa`ahb`bagoa`aib`bahoa`ajb`baioa`akb`bajoa`alb`bakoa`amb`baloa`anb`bamoa`aob`banoa`b`ab`baooa`baab`bb`aoa`bbab`bbaaa`aa`b`bbbaa`baaabb`bbcaa`bbaacb`bbdaa`bcaadb`bbeaa`bdaaeb`bbfaa`beaafb`bbgaa`bfaagb`bbhaa`bgaahb`bbiaa`bhaaib`bbjaa`biaajb`bbkaa`bjaakb`bblaa`bkaalb`bbmaa`blaamb`bbnaa`bmaanb`bboaa`bnaaob`bb`ba`boab`aTcab`bb`bE
-A`Lb`cahaab`bahaab`bahaab`bahaab`bb`aaab`bb`aaab`bb`aaab`bb`aaab`bb`baab`bb`baab`bb`baab`bb`baab`bb`daab`bb`daab`bb`daab`bb`daab`bFbaebab
+A`b`bLb`cahaab`bahaab`bahaab`bahaab`bb`aaab`bb`aaab`bb`aaab`bb`aaab`bb`baab`bb`baab`bb`baab`bb`baab`bb`daab`bb`daab`bb`daab`bb`daab`bFbaebab
 Bah`oabbcaAaaAaaaaaadaah`AbaTaaaaabaa
 Bb`baboaabga at dTcab`bab
 BahacoabbcaAaaBooaaaaddaahac at aTaaadadac
@@ -37,7 +37,7 @@ Bb`bblboaabga at dTcab`bblb
 Bb`dbmboabbfaPoooooooooooooooohAahaabnbdab`dbmb at hTaabnbb`bboa
 Bb`bboboaabga at dTcab`bbob
 BTcab`bAadE
-A`Lbdbahaab`bahaab`bahaab`bb`aaab`bb`aaab`bb`aaab`bb`baab`bb`baab`bb`baab`bb`daab`bb`daab`bb`daab`bFbmcbia
+A`b`bLbdbahaab`bahaab`bahaab`bb`aaab`bb`aaab`bb`aaab`bb`baab`bb`baab`bb`baab`bb`daab`bb`daab`bb`daab`bFbmcbia
 Bah`oabbhaBooaAaaaaaadaah`BnoaTaaaaabaa
 Bb`baboaabga at dTcab`bab
 BahacoabbhaAaaBooaaaaddaahacAbaTaaadadac
@@ -63,7 +63,7 @@ Bb`bb`boaabga at dTcab`bb`b
 Bb`dbaboabbkaAahAahaabbbdab`dbab at hTaabbbbhabga
 Bb`bbcboaabga at dTcab`bbcb
 BTcab`bAddE
-A`Lb`cahaab`bahaab`bahaab`bahaab`bb`aaab`bb`aaab`bb`aaab`bb`aaab`bb`baab`bb`baab`bb`baab`bb`baab`bb`daab`bb`daab`bb`daab`bb`daab`bFbaebab
+A`b`bLb`cahaab`bahaab`bahaab`bahaab`bb`aaab`bb`aaab`bb`aaab`bb`aaab`bb`baab`bb`baab`bb`baab`bb`baab`bb`daab`bb`daab`bb`daab`bb`daab`bFbaebab
 Bah`oabblaBooaAaaaaaadaah`BooaTaaaaabaa
 Bb`baboaabga at dTcab`bab
 BahacoabblaBooaBooaaaaddaahacAaaTaaadadac
@@ -97,11 +97,11 @@ Bb`bblboaabga at dTcab`bblb
 Bb`dbmboabboaImaghnanbdhIogjdckg`bhaabnbdab`dbmbPcfifjghokjjemflghTaabnbb`bboa
 Bb`bboboaabga at dTcab`bbob
 BTcab`bB`adE
-A`Lacb`aaab`bFafac
+A`b`bLacb`aaab`bFafac
 Bb`a`oabbabDjnmobAgbaaaadab`a`DfddbbTaaaaabaa
 Bb`baboaabga at dTcab`bab
 BTcab`bB`ddE
-A`Lbfaahaab`bahaab`bahaab`bahaab`bahahaab`bahaab`bb`aaab`bFbebao
+A`b`bLbfaahaab`bahaab`bahaab`bahaab`bahahaab`bahaab`bb`aaab`bFbebao
 Bah`oabbdbAaaBooaaaaadaah`BooaTaaaaabaa
 Bb`baboaabga at dTcab`bab
 BahacoabbdbBooaAaaaaaddaahacBooaTaaadadac
@@ -117,7 +117,7 @@ Bb`bbbaoaabga at dTcab`bbba
 Bb`abcaoabbebDjnmobAgbaabdadab`abcaDdkoobTaabdaanam
 Bb`bbeaoaabga at dTcab`bbea
 BTcab`bC``adE
-A`Laoahaab`bahaab`bahaab`bb`aaab`bb`aaab`bFbjaak
+A`b`bLaoahaab`bahaab`bahaab`bb`aaab`bb`aaab`bFbjaak
 Bah`oabblbBooaAaaaaaadaah`@aTaaaaabaa
 Bb`baboaabga at dTcab`bab
 BahacoabbhbBooaAaaaaaddaahac at aTaaadadac
@@ -129,7 +129,7 @@ Bb`bakoaabga at dTcab`bak
 Bb`aaloabbibDinmobAgbaaamdab`aalAfbTaaamajai
 Bb`banoaabga at dTcab`ban
 BTcab`bC``ddE
-A`Lalahaab`bahaab`bahaab`bb`aaab`bFbeaai
+A`b`bLalahaab`bahaab`bahaab`bb`aaab`bFbeaai
 Bah`oabb`cAaaAadaaaadaah`AbaTaaaaabaa
 Bb`baboaabga at dTcab`bab
 Bahacoabb`cAaa at daaaddaahacAaaTaaadadac
@@ -139,19 +139,19 @@ Bb`bahoaabga at dTcab`bah
 Bb`aaioabbacDnojobAbdaaajdab`aaiDhoknbTaaajahag
 Bb`bakoaabga at dTcab`bak
 BTcab`bD```adE
-A`Lagahaab`bahahaab`bFalae
+A`b`bLagahaab`bahahaab`bFalae
 Bah`oabbdcBnoaAadaaaadaah`BogaTaaaaabaa
 Bb`baboaabga at dTcab`bab
 BahacoabbcaBnoaAeaahadoabbdcacAadaaaedaahadAaaTaaaeadac
 Bb`bafoaabga at dTcab`baf
 BTcab`bD```ddE
-A`Lafahaab`bahaab`bFakae
+A`b`bLafahaab`bahaab`bFakae
 Bah`oabbhcBnoaAaaaaaadaah`BooaTaaaaabaa
 Bb`baboaabga at dTcab`bab
 BahacoabbhcBngaAaaaaaddaahacBocaTaaadadac
 Bb`baeoaabga at dTcab`bae
 BTcab`bE````adE
-A`Lalahaab`bb`aaab`bb`baab`bb`daab`bFbeaai
+A`b`bLalahaab`bb`aaab`bb`baab`bb`daab`bFbeaai
 Bah`oabblcBjeaAoaaaaadaah`AjaTaaaaabaa
 Bb`baboaabga at dTcab`bab
 Bb`aacoabbmcDlkjebD```obaaaddab`aacD```ebTaaadadac
@@ -161,7 +161,7 @@ Bb`bahoaabga at dTcab`bah
 Bb`daioabbocPdcbahgfedcbalkjehG``````ohaaajdab`daiG``````fhTaaajahag
 Bb`bakoaabga at dTcab`bak
 BTcab`bE````ddE
-A`Lalahaab`bb`aaab`bb`baab`bb`daab`bFbeaai
+A`b`bLalahaab`bb`aaab`bb`baab`bb`daab`bFbeaai
 Bah`oabb`dBjeaAoaaaaadaah`BoeaTaaaaabaa
 Bb`baboaabga at dTcab`bab
 Bb`aacoabbadDlkjebD```obaaaddab`aacDlkjobTaaadadac
@@ -171,7 +171,7 @@ Bb`bahoaabga at dTcab`bah
 Bb`daioabbcdPdcbahgfedcbalkjehG``````ohaaajdab`daiPdcbahgoedcbalkjehTaaajahag
 Bb`bakoaabga at dTcab`bak
 BTcab`bF`````adE
-A`Lalahaab`bb`aaab`bb`baab`bb`daab`bFbeaai
+A`b`bLalahaab`bb`aaab`bb`baab`bb`daab`bFbeaai
 Bah`oabbddBjeaB`oaaaaadaah`BjjaTaaaaabaa
 Bb`baboaabga at dTcab`bab
 Bb`aacoabbedDjejebD``oobaaaddab`aacDjeejbTaaadadac
@@ -181,7 +181,7 @@ Bb`bahoaabga at dTcab`bah
 Bb`daioabbgdPjejejejejejejejehP``oooooooooooooohaaajdab`daiPjeejejejejejejejhTaaajahag
 Bb`bakoaabga at dTcab`bak
 BTcab`bF`````ddE
-A`Laib`aaab`bb`baab`bb`daab`bFb`aag
+A`b`bLaib`aaab`bb`baab`bb`daab`bFb`aag
 Bb`a`oaabhdBloaaaaadab`a`DlooobTaaaaabaa
 Bb`baboaabga at dTcab`bab
 Bb`bacoaabidDjooobaaaddab`bacHjooooooodTaaadadac
@@ -189,7 +189,7 @@ Bb`baeoaabga at dTcab`bae
 Bb`dafoaabjdHjooooooodaaagdab`dafPjooooooooooooooohTaaagafae
 Bb`bahoaabga at dTcab`bah
 BTcab`bG``````adE
-A`Laib`aaab`bb`baab`bb`daab`bFb`aag
+A`b`bLaib`aaab`bb`baab`bb`daab`bFb`aag
 Bb`a`oaabkdBloaaaaadab`a`BlobTaaaaabaa
 Bb`baboaabga at dTcab`bab
 Bb`bacoaabldDlooobaaaddab`bacDlooodTaaadadac
@@ -197,7 +197,7 @@ Bb`baeoaabga at dTcab`bae
 Bb`dafoaabmdHlooooooodaaagdab`dafHlooooooohTaaagafae
 Bb`bahoaabga at dTcab`bah
 BTcab`bG``````ddE
-A`Laiahaab`bb`aaab`bb`baab`bFb`aag
+A`b`bLaiahaab`bb`aaab`bb`baab`bFb`aag
 Bah`oaabndDmnnobaaaadaah`BmnaTaaaaabaa
 Bb`baboaabga at dTcab`bab
 Bb`aacoaabodHmnnomjnmdaaaddab`aacDmnnobTaaadadac
@@ -205,7 +205,7 @@ Bb`baeoaabga at dTcab`bae
 Bb`bafoaab`ePonnkmnnomjnmonnkhaaagdab`bafHonnkmnnodTaaagafae
 Bb`bahoaabga at dTcab`bah
 BTcab`bH```````adE
-A`Laob`baab`bb`baab`bb`baab`bb`baab`bb`baab`bFbjaak
+A`b`bLaob`baab`bb`baab`bb`baab`bb`baab`bb`baab`bFbjaak
 Bb`b`oadbaeHoooooooodAbd at dAddaaaadab`b`CijbdTaaaaabaa
 Bb`baboaabga at dTcab`bab
 Bb`bacoadbaeHoooooooodHoooooooodAadHoooooooodaaaddab`bacCbbcdTaaadadac
@@ -217,137 +217,137 @@ Bb`bakoaabga at dTcab`bak
 Bb`baloadbaeHooooooood at d@dHoooooooodaaamdab`balBkbdTaaamajai
 Bb`banoaabga at dTcab`ban
 BTcab`bH```````ddE
-A`Lafb`baab`bb`baab`bFakae
+A`b`bLafb`baab`bb`baab`bFakae
 Bb`b`oacbbeAddAedAfdaaaadab`b`AedTaaaaabaa
 Bb`baboaabga at dTcab`bab
 Bb`bacoacbbe at dAedAfdaaaddab`bacAfdTaaadadac
 Bb`baeoaabga at dTcab`bae
 BTcab`bH```````hdE
-AbLaaahahahFabaa
+AbahLaaahahahFabaa
 Bahaba`aa`TcaahabE
-AbLaab`ab`ab`aFabaa
+Abb`aLaab`ab`ab`aFabaa
 Bb`aaba`aa`Tcab`aabE
-AbLaab`bb`bb`bFabaa
+Abb`bLaab`bb`bb`bFabaa
 Bb`baba`aa`Tcab`babE
-AbLaab`db`db`dFabaa
+Abb`dLaab`db`db`dFabaa
 Bb`daba`aa`Tcab`dabE
-AaLaab`bb`bFabaa
+Aab`bLaab`bb`bFabaa
 Bb`baae`Aad`Tcab`baaE
-AbLaaahahahFabaa
+AbahLaaahahahFabaa
 Bahabb``aaTcaahabE
-AbLaab`ab`ab`aFabaa
+Abb`aLaab`ab`ab`aFabaa
 Bb`aabb``aaTcab`aabE
-AbLaab`bb`bb`bFabaa
+Abb`bLaab`bb`bb`bFabaa
 Bb`babb``aaTcab`babE
-AbLaab`db`db`dFabaa
+Abb`dLaab`db`db`dFabaa
 Bb`dabb``aaTcab`dabE
-AbLaaahahahFabaa
+AbahLaaahahahFabaa
 Bahabc`aa`TcaahabE
-AbLaab`ab`ab`aFabaa
+Abb`aLaab`ab`ab`aFabaa
 Bb`aabc`aa`Tcab`aabE
-AbLaab`bb`bb`bFabaa
+Abb`bLaab`bb`bb`bFabaa
 Bb`babc`aa`Tcab`babE
-AbLaab`db`db`dFabaa
+Abb`dLaab`db`db`dFabaa
 Bb`dabc`aa`Tcab`dabE
-AbLaaahahahFabaa
+AbahLaaahahahFabaa
 Bahabd``aaTcaahabE
-AbLaab`ab`ab`aFabaa
+Abb`aLaab`ab`ab`aFabaa
 Bb`aabd``aaTcab`aabE
-AbLaab`bb`bb`bFabaa
+Abb`bLaab`bb`bb`bFabaa
 Bb`babd``aaTcab`babE
-AbLaab`db`db`dFabaa
+Abb`dLaab`db`db`dFabaa
 Bb`dabd``aaTcab`dabE
-AbLadahahb`bb`bb`bahFaeaa
+AbahLadahahb`bb`bb`bahFaeaa
 Bb`babo``b`baco`aab`bade`abacahaen`adTcaahaeE
-AbLadb`ab`ab`bb`bb`bb`aFaeaa
+Abb`aLadb`ab`ab`bb`bb`bb`aFaeaa
 Bb`babo``b`baco`aab`bade`abacb`aaen`adTcab`aaeE
-AbLaab`bb`bb`bFabaa
+Abb`bLaab`bb`bb`bFabaa
 Bb`babe``aaTcab`babE
-AbLaab`db`db`dFabaa
+Abb`dLaab`db`db`dFabaa
 Bb`dabe``aaTcab`dabE
-AbLaaahahahFabaa
+AbahLaaahahahFabaa
 Bahabf``aaTcaahabE
-AbLaab`ab`ab`aFabaa
+Abb`aLaab`ab`ab`aFabaa
 Bb`aabf``aaTcab`aabE
-AbLaab`bb`bb`bFabaa
+Abb`bLaab`bb`bb`bFabaa
 Bb`babf``aaTcab`babE
-AbLaab`db`db`dFabaa
+Abb`dLaab`db`db`dFabaa
 Bb`dabf``aaTcab`dabE
-AbLadahahb`bb`bb`bahFaeaa
+AbahLadahahb`bb`bb`bahFaeaa
 Bb`babo``b`baco`aab`badg`abacahaen`adTcaahaeE
-AbLadb`ab`ab`bb`bb`bb`aFaeaa
+Abb`aLadb`ab`ab`bb`bb`bb`aFaeaa
 Bb`babo``b`baco`aab`badg`abacb`aaen`adTcab`aaeE
-AbLaab`bb`bb`bFabaa
+Abb`bLaab`bb`bb`bFabaa
 Bb`babg``aaTcab`babE
-AbLaab`db`db`dFabaa
+Abb`dLaab`db`db`dFabaa
 Bb`dabg``aaTcab`dabE
-AbLacahb`bb`bb`bahFadaa
+AbahLacahb`bb`bb`bahFadaa
 Bb`babo``b`bach`abaaahadn`acTcaahadE
-AbLacb`ab`bb`bb`bb`aFadaa
+Abb`aLacb`ab`bb`bb`bb`aFadaa
 Bb`babo``b`bach`abaab`aadn`acTcab`aadE
-AbLaab`bb`bb`bFabaa
+Abb`bLaab`bb`bb`bFabaa
 Bb`babh``aaTcab`babE
-AbLabb`db`bb`db`dFacaa
+Abb`dLabb`db`bb`db`dFacaa
 Bb`dab`aaab`dach``abTcab`dacE
-AbLacahb`bb`bb`bahFadaa
+AbahLacahb`bb`bb`bahFadaa
 Bb`bab`a`b`baci`abaaahadn`acTcaahadE
-AbLacb`ab`bb`bb`bb`aFadaa
+Abb`aLacb`ab`bb`bb`bb`aFadaa
 Bb`bab`a`b`baci`abaab`aadn`acTcab`aadE
-AbLaab`bb`bb`bFabaa
+Abb`bLaab`bb`bb`bFabaa
 Bb`babi``aaTcab`babE
-AbLabb`db`bb`db`dFacaa
+Abb`dLabb`db`bb`db`dFacaa
 Bb`dab`aaab`daci``abTcab`dacE
-AbLadahahb`bb`bb`bahFaeaa
+AbahLadahahb`bb`bb`bahFaeaa
 Bb`babo``b`baco`aab`badj`abacahaen`adTcaahaeE
-AbLadb`ab`ab`bb`bb`bb`aFaeaa
+Abb`aLadb`ab`ab`bb`bb`bb`aFaeaa
 Bb`babo``b`baco`aab`badj`abacb`aaen`adTcab`aaeE
-AbLaab`bb`bb`bFabaa
+Abb`bLaab`bb`bb`bFabaa
 Bb`babj``aaTcab`babE
-AbLaab`db`db`dFabaa
+Abb`dLaab`db`db`dFabaa
 Bb`dabj``aaTcab`dabE
-AbLaaahahahFabaa
+AbahLaaahahahFabaa
 Bahabk`aa`TcaahabE
-AbLaab`ab`ab`aFabaa
+Abb`aLaab`ab`ab`aFabaa
 Bb`aabk`aa`Tcab`aabE
-AbLaab`bb`bb`bFabaa
+Abb`bLaab`bb`bb`bFabaa
 Bb`babk`aa`Tcab`babE
-AbLaab`db`db`dFabaa
+Abb`dLaab`db`db`dFabaa
 Bb`dabk`aa`Tcab`dabE
-AbLaaahahahFabaa
+AbahLaaahahahFabaa
 Bahabl`aa`TcaahabE
-AbLaab`ab`ab`aFabaa
+Abb`aLaab`ab`ab`aFabaa
 Bb`aabl`aa`Tcab`aabE
-AbLaab`bb`bb`bFabaa
+Abb`bLaab`bb`bb`bFabaa
 Bb`babl`aa`Tcab`babE
-AbLaab`db`db`dFabaa
+Abb`dLaab`db`db`dFabaa
 Bb`dabl`aa`Tcab`dabE
-AbLaaahahahFabaa
+AbahLaaahahahFabaa
 Bahabm`aa`TcaahabE
-AbLaab`ab`ab`aFabaa
+Abb`aLaab`ab`ab`aFabaa
 Bb`aabm`aa`Tcab`aabE
-AbLaab`bb`bb`bFabaa
+Abb`bLaab`bb`bb`bFabaa
 Bb`babm`aa`Tcab`babE
-AbLaab`db`db`dFabaa
+Abb`dLaab`db`db`dFabaa
 Bb`dabm`aa`Tcab`dabE
-AaLaaahb`aFabaa
+Aab`aLaaahb`aFabaa
 Bb`aaao``Tcab`aaaE
-AaLaab`ab`bFabaa
+Aab`bLaab`ab`bFabaa
 Bb`baao``Tcab`baaE
-AaLaab`bb`dFabaa
+Aab`dLaab`bb`dFabaa
 Bb`daao``Tcab`daaE
-AaLaaahb`aFabaa
+Aab`aLaaahb`aFabaa
 Bb`aaa`a`Tcab`aaaE
-AaLaab`ab`bFabaa
+Aab`bLaab`ab`bFabaa
 Bb`baa`a`Tcab`baaE
-AaLaab`bb`dFabaa
+Aab`dLaab`bb`dFabaa
 Bb`daa`a`Tcab`daaE
-AaLaab`aahFabaa
+AaahLaab`aahFabaa
 Bahaan``TcaahaaE
-AaLaab`bb`aFabaa
+Aab`aLaab`bb`aFabaa
 Bb`aaan``Tcab`aaaE
-AaLaab`db`bFabaa
+Aab`bLaab`db`bFabaa
 Bb`baan``Tcab`baaE
-AdLbmab`bb`bb`bb`baab`baab`bb`baab`bb`baab`bb`baab`bb`baab`bb`baab`bb`baab`bb`baab`bb`baab`bb`bFbnaaa
+Adb`bLbmab`bb`bb`bb`baab`baab`bb`baab`bb`baab`bb`baab`bb`baab`bb`baab`bb`baab`bb`baab`bb`baab`bb`bFbnaaa
 Baaadmab`b`aab`bae`aadaaafjab`baaabb`bagl`aeAbdb`bahnaafaeagaaaijab`b`aab`bajl`ahAddb`baknaaiajahaaalmab`baaabb`baml`akAhdb`bannaalakamaaaohab`b`acb`bb`al`anB`adb`bbaanaaob`aanaabbafab`baaacb`bbcal`baaB`bdb`bbdanabbabaabcaaabeahab`babacb`bbfal`bdaB`ddb`bbganabeabdabfaaabhafab`b`acb`bbial`bgaB`hdb`bbjanabhabiabgaaabkadab`b`aab`bblal`bjaC``adb`bbmanabkablabjaaabnadab`baaabb`bboal`bmaC``bdb`bb`bnabnabmaboaTcab`bb`bE
-AcLabb`bb`bb`baab`bFacaa
+Acb`bLabb`bb`bb`baab`bFacaa
 Baaaceab`b`@db`badnaacaaabTcab`badE
diff --git a/unit_tests/input/retmagic.cbc b/unit_tests/input/retmagic.cbc
index 1783fba..8587d0a 100644
--- a/unit_tests/input/retmagic.cbc
+++ b/unit_tests/input/retmagic.cbc
@@ -1,5 +1,5 @@
 ClamBCaa`|`````|`aeaap`clamcoincidencejb
 Ted
 E``
-A`L`Faaaa
+A`b`bL`Faaaa
 BTcab`bHm``odcbadE

-- 
Debian repository for ClamAV



More information about the Pkg-clamav-commits mailing list