[llvm] r333942 - Fix for llvm-dis/llvm-bcanalyzer overflows
Teresa Johnson via llvm-commits
llvm-commits at lists.llvm.org
Mon Jun 4 12:20:03 PDT 2018
Author: tejohnson
Date: Mon Jun 4 12:20:02 2018
New Revision: 333942
URL: http://llvm.org/viewvc/llvm-project?rev=333942&view=rev
Log:
Fix for llvm-dis/llvm-bcanalyzer overflows
Summary:
These tools failed for a very large bitcode file produced by LTO due to
64-bit values being assigned to 32-bit types. For the BitstreamReader.h
fix, the value initially fit into the 32-bit unsigned, but there was an
overflow when multiplying by 32 furter below to compute the bit offset.
No test case in the patch as this requires a huge bitcode file.
Reviewers: pcc, george.karpenkov
Subscribers: mehdi_amini, a.sidorin, llvm-commits
Differential Revision: https://reviews.llvm.org/D47731
Modified:
llvm/trunk/include/llvm/Bitcode/BitstreamReader.h
llvm/trunk/tools/llvm-bcanalyzer/llvm-bcanalyzer.cpp
Modified: llvm/trunk/include/llvm/Bitcode/BitstreamReader.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Bitcode/BitstreamReader.h?rev=333942&r1=333941&r2=333942&view=diff
==============================================================================
--- llvm/trunk/include/llvm/Bitcode/BitstreamReader.h (original)
+++ llvm/trunk/include/llvm/Bitcode/BitstreamReader.h Mon Jun 4 12:20:02 2018
@@ -429,7 +429,7 @@ public:
// don't care what code widths are used inside of it.
ReadVBR(bitc::CodeLenWidth);
SkipToFourByteBoundary();
- unsigned NumFourBytes = Read(bitc::BlockSizeWidth);
+ size_t NumFourBytes = Read(bitc::BlockSizeWidth);
// Check that the block wasn't partially defined, and that the offset isn't
// bogus.
Modified: llvm/trunk/tools/llvm-bcanalyzer/llvm-bcanalyzer.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-bcanalyzer/llvm-bcanalyzer.cpp?rev=333942&r1=333941&r2=333942&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-bcanalyzer/llvm-bcanalyzer.cpp (original)
+++ llvm/trunk/tools/llvm-bcanalyzer/llvm-bcanalyzer.cpp Mon Jun 4 12:20:02 2018
@@ -602,7 +602,7 @@ static bool ParseBlock(BitstreamCursor &
++BlockStats.NumRecords;
StringRef Blob;
- unsigned CurrentRecordPos = Stream.GetCurrentBitNo();
+ uint64_t CurrentRecordPos = Stream.GetCurrentBitNo();
unsigned Code = Stream.readRecord(Entry.ID, Record, &Blob);
// Increment the # occurrences of this code.
More information about the llvm-commits
mailing list