浏览代码

Handled blocks being too small in arena.cc

When the user passed in a block which was smaller than the Block
structure, this code would blow past the end of the memory and
crash.  Check for that condition.
Austin Schuh 10 年之前
父节点
当前提交
ad1d726cc2
共有 1 个文件被更改,包括 3 次插入0 次删除
  1. 3 0
      src/google/protobuf/arena.cc

+ 3 - 0
src/google/protobuf/arena.cc

@@ -61,6 +61,9 @@ void Arena::Init() {
   cleanup_list_ = 0;
 
   if (options_.initial_block != NULL && options_.initial_block_size > 0) {
+    GOOGLE_CHECK_GE(options_.initial_block_size, sizeof(Block))
+        << ": Initial block size too small for header.";
+
     // Add first unowned block to list.
     Block* first_block = reinterpret_cast<Block*>(options_.initial_block);
     first_block->size = options_.initial_block_size;