From 21dc2be97a33129f4b6a5b6baa4300a0eee2cd52 Mon Sep 17 00:00:00 2001 From: Kostya Serebryany Date: Tue, 13 Dec 2011 19:34:53 +0000 Subject: [PATCH] [asan] report an error if blacklist file contains a malformed regex. fixes asan issue 17 llvm-svn: 146503 --- .../Instrumentation/AddressSanitizer.cpp | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp b/llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp index f16bdf530c52..f170cf150ab8 100644 --- a/llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp +++ b/llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp @@ -979,15 +979,23 @@ BlackList::BlackList(const std::string &Path) { for (size_t i = 0, numLines = Lines.size(); i < numLines; i++) { if (Lines[i].startswith(kFunPrefix)) { std::string ThisFunc = Lines[i].substr(strlen(kFunPrefix)); - if (Fun.size()) { - Fun += "|"; - } + std::string ThisFuncRE; // add ThisFunc replacing * with .* for (size_t j = 0, n = ThisFunc.size(); j < n; j++) { if (ThisFunc[j] == '*') - Fun += '.'; - Fun += ThisFunc[j]; + ThisFuncRE += '.'; + ThisFuncRE += ThisFunc[j]; } + // Check that the regexp is valid. + Regex CheckRE(ThisFuncRE); + std::string Error; + if (!CheckRE.isValid(Error)) + report_fatal_error("malformed blacklist regex: " + ThisFunc + + ": " + Error); + // Append to the final regexp. + if (Fun.size()) + Fun += "|"; + Fun += ThisFuncRE; } } if (Fun.size()) { -- GitLab