From ad1d726cc28e783495e7d11c73c49a7502400a89 Mon Sep 17 00:00:00 2001 From: Austin Schuh Date: Fri, 21 Aug 2015 14:16:34 -0700 Subject: 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. --- src/google/protobuf/arena.cc | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/google/protobuf/arena.cc b/src/google/protobuf/arena.cc index ed1c5ef2..f499108d 100755 --- a/src/google/protobuf/arena.cc +++ b/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(options_.initial_block); first_block->size = options_.initial_block_size; -- cgit v1.2.3