[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