about summary refs log tree commit diff
path: root/instrumentation/afl-llvm-dict2file.so.cc
diff options
context:
space:
mode:
authorvan Hauser <vh@thc.org>2020-09-06 13:29:32 +0200
committervan Hauser <vh@thc.org>2020-09-06 13:29:32 +0200
commit6114a48b89528ff3f24d91832d588aa8c05b672e (patch)
treee586faffca4d2a1fe69ede11fd04aefb73cf1dd9 /instrumentation/afl-llvm-dict2file.so.cc
parente065ba9497df5c95d5b198b1230bc02629b343db (diff)
downloadafl++-6114a48b89528ff3f24d91832d588aa8c05b672e.tar.gz
add std::string and bcmp to dictionary functions
Diffstat (limited to 'instrumentation/afl-llvm-dict2file.so.cc')
-rw-r--r--instrumentation/afl-llvm-dict2file.so.cc15
1 files changed, 12 insertions, 3 deletions
diff --git a/instrumentation/afl-llvm-dict2file.so.cc b/instrumentation/afl-llvm-dict2file.so.cc
index ef42756e..0ab97d5b 100644
--- a/instrumentation/afl-llvm-dict2file.so.cc
+++ b/instrumentation/afl-llvm-dict2file.so.cc
@@ -283,6 +283,7 @@ bool AFLdict2filePass::runOnModule(Module &M) {
           bool   isStrcasecmp = true;
           bool   isStrncasecmp = true;
           bool   isIntMemcpy = true;
+          bool   isStdString = true;
           bool   addedNull = false;
           size_t optLen = 0;
 
@@ -295,10 +296,15 @@ bool AFLdict2filePass::runOnModule(Module &M) {
           isStrncmp &= !FuncName.compare("strncmp");
           isStrcasecmp &= !FuncName.compare("strcasecmp");
           isStrncasecmp &= !FuncName.compare("strncasecmp");
-          isIntMemcpy &= !FuncName.compare("llvm.memcpy.p0i8.p0i8.i64");
+          isIntMemcpy &= (!FuncName.compare("llvm.memcpy.p0i8.p0i8.i64") ||
+                          !FuncName.compare("bcmp"));
+          isStdString &= ((FuncName.find("basic_string") != std::string::npos &&
+                           FuncName.find("compare") != std::string::npos) ||
+                          (FuncName.find("basic_string") != std::string::npos &&
+                           FuncName.find("find") != std::string::npos));
 
           if (!isStrcmp && !isMemcmp && !isStrncmp && !isStrcasecmp &&
-              !isStrncasecmp && !isIntMemcpy)
+              !isStrncasecmp && !isIntMemcpy && !isStdString)
             continue;
 
           /* Verify the strcmp/memcmp/strncmp/strcasecmp/strncasecmp function
@@ -330,9 +336,12 @@ bool AFLdict2filePass::runOnModule(Module &M) {
                            FT->getParamType(0) ==
                                IntegerType::getInt8PtrTy(M.getContext()) &&
                            FT->getParamType(2)->isIntegerTy();
+          isStdString &= FT->getNumParams() >= 2 &&
+                         FT->getParamType(0)->isPointerTy() &&
+                         FT->getParamType(1)->isPointerTy();
 
           if (!isStrcmp && !isMemcmp && !isStrncmp && !isStrcasecmp &&
-              !isStrncasecmp && !isIntMemcpy)
+              !isStrncasecmp && !isIntMemcpy && !isStdString)
             continue;
 
           /* is a str{n,}{case,}cmp/memcmp, check if we have