[llvm] bf17cb2 - [Bitstream] Make MaxChunkSize word-size independent

Nikita Popov via llvm-commits llvm-commits at lists.llvm.org
Tue Feb 8 01:17:48 PST 2022


Author: Nikita Popov
Date: 2022-02-08T10:14:07+01:00
New Revision: bf17cb294af422512b522575f3f74ab7964bf911

URL: https://github.com/llvm/llvm-project/commit/bf17cb294af422512b522575f3f74ab7964bf911
DIFF: https://github.com/llvm/llvm-project/commit/bf17cb294af422512b522575f3f74ab7964bf911.diff

LOG: [Bitstream] Make MaxChunkSize word-size independent

We only support chunks <= 32 bits regardless of whether we're
running on a 64-bit platform or not. Chunk size > 32 <= 64 would
cause UB in the reading code.

Added: 
    llvm/test/Bitcode/Inputs/invalid-chunk-size.bc

Modified: 
    llvm/include/llvm/Bitstream/BitstreamReader.h
    llvm/test/Bitcode/invalid.test

Removed: 
    


################################################################################
diff  --git a/llvm/include/llvm/Bitstream/BitstreamReader.h b/llvm/include/llvm/Bitstream/BitstreamReader.h
index 5a66b2dc4971..afe327cffdba 100644
--- a/llvm/include/llvm/Bitstream/BitstreamReader.h
+++ b/llvm/include/llvm/Bitstream/BitstreamReader.h
@@ -97,8 +97,6 @@ class SimpleBitstreamCursor {
   unsigned BitsInCurWord = 0;
 
 public:
-  static const constexpr size_t MaxChunkSize = sizeof(word_t) * 8;
-
   SimpleBitstreamCursor() = default;
   explicit SimpleBitstreamCursor(ArrayRef<uint8_t> BitcodeBytes)
       : BitcodeBytes(BitcodeBytes) {}
@@ -187,7 +185,7 @@ class SimpleBitstreamCursor {
   }
 
   Expected<word_t> Read(unsigned NumBits) {
-    static const unsigned BitsInWord = MaxChunkSize;
+    static const unsigned BitsInWord = sizeof(word_t) * 8;
 
     assert(NumBits && NumBits <= BitsInWord &&
            "Cannot return zero or more than BitsInWord bits!");
@@ -372,7 +370,7 @@ class BitstreamCursor : SimpleBitstreamCursor {
   BitstreamBlockInfo *BlockInfo = nullptr;
 
 public:
-  static const size_t MaxChunkSize = sizeof(word_t) * 8;
+  static const size_t MaxChunkSize = 32;
 
   BitstreamCursor() = default;
   explicit BitstreamCursor(ArrayRef<uint8_t> BitcodeBytes)

diff  --git a/llvm/test/Bitcode/Inputs/invalid-chunk-size.bc b/llvm/test/Bitcode/Inputs/invalid-chunk-size.bc
new file mode 100644
index 000000000000..3fa9cd0e29d0
Binary files /dev/null and b/llvm/test/Bitcode/Inputs/invalid-chunk-size.bc 
diff er

diff  --git a/llvm/test/Bitcode/invalid.test b/llvm/test/Bitcode/invalid.test
index 6d2d2f25adc2..db8cfdec76dc 100644
--- a/llvm/test/Bitcode/invalid.test
+++ b/llvm/test/Bitcode/invalid.test
@@ -276,3 +276,8 @@ RUN: not llvm-dis -disable-output %p/Inputs/comdat-name-too-large.bc 2>&1 | \
 RUN:   FileCheck --check-prefix=COMDAT-NAME-TOO-LARGE %s
 
 COMDAT-NAME-TOO-LARGE: Comdat name size too large
+
+RUN: not llvm-dis -disable-output %p/Inputs/invalid-chunk-size.bc 2>&1 | \
+RUN:   FileCheck --check-prefix=INVALID-CHUNK-SIZE %s
+
+INVALID-CHUNK-SIZE: Fixed or VBR abbrev record with size > MaxChunkData


        


More information about the llvm-commits mailing list