[llvm] r251667 - Don't assert if materializing before seeing any function bodies

Filipe Cabecinhas via llvm-commits llvm-commits at lists.llvm.org
Thu Oct 29 16:37:28 PDT 2015


Author: filcab
Date: Thu Oct 29 18:37:28 2015
New Revision: 251667

URL: http://llvm.org/viewvc/llvm-project?rev=251667&view=rev
Log:
Don't assert if materializing before seeing any function bodies

This assert was reachable from user input. A minimized test case (no
FUNCTION_BLOCK_ID record) is attached.

Bug found with afl-fuzz

Added:
    llvm/trunk/test/Bitcode/Inputs/invalid-no-function-block.bc
Modified:
    llvm/trunk/lib/Bitcode/Reader/BitcodeReader.cpp
    llvm/trunk/test/Bitcode/invalid.test

Modified: llvm/trunk/lib/Bitcode/Reader/BitcodeReader.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Bitcode/Reader/BitcodeReader.cpp?rev=251667&r1=251666&r2=251667&view=diff
==============================================================================
--- llvm/trunk/lib/Bitcode/Reader/BitcodeReader.cpp (original)
+++ llvm/trunk/lib/Bitcode/Reader/BitcodeReader.cpp Thu Oct 29 18:37:28 2015
@@ -3054,7 +3054,9 @@ std::error_code BitcodeReader::rememberA
 
   if (Stream.AtEndOfStream()) return error("Could not find function in stream");
 
-  assert(SeenFirstFunctionBody);
+  if (!SeenFirstFunctionBody)
+    return error("Trying to materialize functions before seeing function blocks");
+
   // An old bitcode file with the symbol table at the end would have
   // finished the parse greedily.
   assert(SeenValueSymbolTable);

Added: llvm/trunk/test/Bitcode/Inputs/invalid-no-function-block.bc
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Bitcode/Inputs/invalid-no-function-block.bc?rev=251667&view=auto
==============================================================================
Binary files llvm/trunk/test/Bitcode/Inputs/invalid-no-function-block.bc (added) and llvm/trunk/test/Bitcode/Inputs/invalid-no-function-block.bc Thu Oct 29 18:37:28 2015 differ

Modified: llvm/trunk/test/Bitcode/invalid.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Bitcode/invalid.test?rev=251667&r1=251666&r2=251667&view=diff
==============================================================================
--- llvm/trunk/test/Bitcode/invalid.test (original)
+++ llvm/trunk/test/Bitcode/invalid.test Thu Oct 29 18:37:28 2015
@@ -207,3 +207,8 @@ RUN: not llvm-dis -disable-output %p/Inp
 RUN:   FileCheck --check-prefix=ALIAS-TYPE-MISMATCH %s
 
 ALIAS-TYPE-MISMATCH: Alias and aliasee types don't match
+
+RUN: not llvm-dis -disable-output %p/Inputs/invalid-no-function-block.bc 2>&1 | \
+RUN:   FileCheck --check-prefix=NO-FUNCTION-BLOCK %s
+
+NO-FUNCTION-BLOCK: Trying to materialize functions before seeing function blocks




More information about the llvm-commits mailing list