tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

absl_hardening_test.cc (2688B)


      1 // Copyright 2020 The Chromium Authors
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #include <limits>
      6 #include <vector>
      7 
      8 #include "gtest/gtest.h"
      9 #include "third_party/abseil-cpp/absl/base/options.h"
     10 #include "third_party/abseil-cpp/absl/container/fixed_array.h"
     11 #include "third_party/abseil-cpp/absl/container/inlined_vector.h"
     12 #include "third_party/abseil-cpp/absl/strings/string_view.h"
     13 #include "third_party/abseil-cpp/absl/types/optional.h"
     14 #include "third_party/abseil-cpp/absl/types/span.h"
     15 #include "third_party/abseil-cpp/absl/types/variant.h"
     16 
     17 namespace {
     18 
     19 #if !ABSL_OPTION_HARDENED
     20 # error "Define ABSL_OPTION_HARDENED to 1 in absl/base/options.h"
     21 #endif
     22 
     23 TEST(AbslHardeningTest, Optional) {
     24  absl::optional<int> optional;
     25  EXPECT_DEATH_IF_SUPPORTED(*optional, "");
     26 }
     27 
     28 TEST(AbslHardeningTest, StringView) {
     29  absl::string_view view("foo");
     30  EXPECT_DEATH_IF_SUPPORTED(view[4], "");
     31  EXPECT_DEATH_IF_SUPPORTED(view.remove_prefix(10), "");
     32  EXPECT_DEATH_IF_SUPPORTED(view.remove_suffix(10), "");
     33 
     34  absl::string_view empty("");
     35  EXPECT_DEATH_IF_SUPPORTED(empty.front(), "");
     36  EXPECT_DEATH_IF_SUPPORTED(empty.back(), "");
     37 }
     38 
     39 TEST(AbslHardeningTest, FixedArray) {
     40  absl::FixedArray<int, 4> fixed_array(0);
     41  EXPECT_DEATH_IF_SUPPORTED(fixed_array[1], "");
     42  EXPECT_DEATH_IF_SUPPORTED(fixed_array.front(), "");
     43  EXPECT_DEATH_IF_SUPPORTED(fixed_array.back(), "");
     44 }
     45 
     46 TEST(AbslHardeningTest, InlinedVector) {
     47  absl::InlinedVector<int, 10> inlined_vector;
     48  EXPECT_DEATH_IF_SUPPORTED(inlined_vector[1], "");
     49  EXPECT_DEATH_IF_SUPPORTED(inlined_vector.front(), "");
     50  EXPECT_DEATH_IF_SUPPORTED(inlined_vector.back(), "");
     51  EXPECT_DEATH_IF_SUPPORTED(
     52      inlined_vector.resize(inlined_vector.max_size() + 1), "");
     53  EXPECT_DEATH_IF_SUPPORTED(inlined_vector.pop_back(), "");
     54 
     55  auto it = inlined_vector.end();
     56  EXPECT_DEATH_IF_SUPPORTED(inlined_vector.erase(it), "");
     57 }
     58 
     59 TEST(AbslHardeningTest, Span) {
     60  std::vector<int> v;
     61  auto span = absl::Span<const int>(v);
     62 
     63  EXPECT_DEATH_IF_SUPPORTED(span.front(), "");
     64  EXPECT_DEATH_IF_SUPPORTED(span.back(), "");
     65  EXPECT_DEATH_IF_SUPPORTED(span.remove_prefix(10), "");
     66  EXPECT_DEATH_IF_SUPPORTED(span.remove_suffix(10), "");
     67  EXPECT_DEATH_IF_SUPPORTED(span[10], "");
     68 
     69  std::vector<int> v1 = {1, 2, 3, 4};
     70  EXPECT_DEATH_IF_SUPPORTED(absl::MakeSpan(&v1[2], &v1[0]), "");
     71  EXPECT_DEATH_IF_SUPPORTED(absl::MakeConstSpan(&v1[2], &v1[0]), "");
     72 }
     73 
     74 TEST(AbslHardeningTest, Variant) {
     75  absl::variant<int, std::string> variant = 5;
     76  EXPECT_DEATH_IF_SUPPORTED(absl::get<std::string>(variant), "");
     77  EXPECT_DEATH_IF_SUPPORTED(absl::get<1>(variant), "");
     78 }
     79 
     80 }  // namespace