From bc0ef08bb7312b5f295cd4070d44be96d4aed9d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?T=C3=B6r=C3=B6k=20Edvin?= Date: Mon, 10 Jan 2011 23:51:32 +0200 Subject: [PATCH] Fix paranoid mode crash (bb #2434). Only occurs if Paranoid mode is set in clamd.conf, or unsigned and signed bytecode are loaded together in --enable-unsigned-bytecode mode. --- ChangeLog | 4 ++++ libclamav/c++/ClamBCRTChecks.cpp | 8 ++++++++ 2 files changed, 12 insertions(+) diff --git a/ChangeLog b/ChangeLog index d5e49b600..192f2a957 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +Mon Jan 10 23:51:08 EET 2011 (edwin) +------------------------------------ + * libclamav/c++/ClamBCRTChecks.cpp: fix paranoid mode crash (bb #2434). + Mon Jan 10 18:43:02 CET 2011 (tk) --------------------------------- * sigtool: improve handling of spaces in cdiffs (bb#2090) diff --git a/libclamav/c++/ClamBCRTChecks.cpp b/libclamav/c++/ClamBCRTChecks.cpp index d3def6abd..a74476c2b 100644 --- a/libclamav/c++/ClamBCRTChecks.cpp +++ b/libclamav/c++/ClamBCRTChecks.cpp @@ -117,8 +117,16 @@ namespace { std::vector insns; + BasicBlock *LastBB = 0; + bool skip = false; for (inst_iterator I=inst_begin(F),E=inst_end(F); I != E;++I) { Instruction *II = &*I; + if (II->getParent() != LastBB) { + LastBB = II->getParent(); + skip = DT->getNode(LastBB) == 0; + } + if (skip) + continue; if (isa(II) || isa(II) || isa(II)) insns.push_back(II); if (CallInst *CI = dyn_cast(II)) {