From: Jinsong Ji Date: Tue, 20 Aug 2019 14:46:02 +0000 (+0000) Subject: [BlockExtractor] Avoid assert with wrong line format X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=b3d478a4bc61638d51ba3bb53d68d529ff69ed9e;p=llvm [BlockExtractor] Avoid assert with wrong line format Summary: When the line format is wrong, we may end up accessing out of bound memory. eg: the test with invalide line will cause assert. Assertion `idx < size()' failed The fix is to report fatal when we found mismatched line format. Reviewers: qcolombet, volkan Reviewed By: qcolombet Subscribers: hiraditya, llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D66444 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@369389 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Transforms/IPO/BlockExtractor.cpp b/lib/Transforms/IPO/BlockExtractor.cpp index 6c365f3f3cb..56854fceac0 100644 --- a/lib/Transforms/IPO/BlockExtractor.cpp +++ b/lib/Transforms/IPO/BlockExtractor.cpp @@ -119,6 +119,8 @@ void BlockExtractor::loadFile() { /*KeepEmpty=*/false); if (LineSplit.empty()) continue; + if (LineSplit.size()!=2) + report_fatal_error("Invalid line format, expecting lines like: 'funcname bb1[;bb2..]'"); SmallVector BBNames; LineSplit[1].split(BBNames, ';', /*MaxSplit=*/-1, /*KeepEmpty=*/false); diff --git a/test/Transforms/BlockExtractor/invalid-line.ll b/test/Transforms/BlockExtractor/invalid-line.ll new file mode 100644 index 00000000000..7e409d35916 --- /dev/null +++ b/test/Transforms/BlockExtractor/invalid-line.ll @@ -0,0 +1,9 @@ +; RUN: echo 'foo' > %t +; RUN: not opt -S -extract-blocks -extract-blocks-file=%t %s 2>&1 | FileCheck %s + +; CHECK: Invalid line +define void @bar() { +bb: + ret void +} +