blob: 8df2ec4c789b86d58246746a091e815a05118335 [file] [log] [blame]
// Copyright 2025 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
// Tests that protobuf hardening options are enabled. Currently, the only option
// available (and tested) is PROTOBUF_INTERNAL_BOUNDS_CHECK_MODE_ABORT.
#include "base/protobuf_hardening_test_support.pb.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace base::test {
TEST(ProtobufHardeningTest, RepeatedFieldOutOfBounds) {
HardeningTestMessage message;
EXPECT_DEATH_IF_SUPPORTED(message.repeated_field(4), "");
EXPECT_DEATH_IF_SUPPORTED(message.set_repeated_field(4, 44), "");
EXPECT_DEATH_IF_SUPPORTED(message.repeated_field()[4], "");
EXPECT_DEATH_IF_SUPPORTED(message.repeated_field().Get(4), "");
EXPECT_DEATH_IF_SUPPORTED((*message.mutable_repeated_field())[4], "");
EXPECT_DEATH_IF_SUPPORTED(message.mutable_repeated_field()->Get(4), "");
EXPECT_DEATH_IF_SUPPORTED(message.mutable_repeated_field()->Mutable(4), "");
}
TEST(ProtobufHardeningTest, RepeatedPtrFieldOutOfBounds) {
HardeningTestMessage message;
EXPECT_DEATH_IF_SUPPORTED(message.repeated_ptr_field(4), "");
EXPECT_DEATH_IF_SUPPORTED(message.mutable_repeated_ptr_field(4), "");
EXPECT_DEATH_IF_SUPPORTED(message.repeated_ptr_field()[4], "");
EXPECT_DEATH_IF_SUPPORTED(message.repeated_ptr_field().Get(4), "");
EXPECT_DEATH_IF_SUPPORTED((*message.mutable_repeated_ptr_field())[4], "");
EXPECT_DEATH_IF_SUPPORTED(message.mutable_repeated_ptr_field()->Get(4), "");
EXPECT_DEATH_IF_SUPPORTED(message.mutable_repeated_ptr_field()->Mutable(4),
"");
}
} // namespace base::test