google / googletest

GoogleTest - Google Testing and Mocking Framework

Home Page:https://google.github.io/googletest/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

[Bug]: Segmentation fault with EXPECT_* failure when using std::vector

josearnal opened this issue · comments

Describe the issue

When looping through the elements of a vector and testing each value, if the vector is too long and the test fails, a segmentation fault will occur.

Here are two basic tests to reproduce the problem. The first one will fail but not seg fault. Thew later will seg fault.

#include "gtest/gtest.h"
#include<vector>

TEST(SegFaultDemonstration, ShortVector) {
    std::vector<double> low_values{0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9};
    for(int i=0;i<=low_values.size()-1;i++){
        EXPECT_GT(low_values[i], 1.0);
    }
}

TEST(SegFaultDemonstration, LongVector) {
    std::vector<double> low_values{0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,0.99};
    for(int i=0;i<=low_values.size()-1;i++){
        EXPECT_GT(low_values[i], 1.0);
    }
}

I've also encountered similar problems if the name of the vector is long, but I am having troubles making a minimal reproducible example for this case.

EDIT:

It turns out that merely initializing "long" vectors causes segmentation faults. What's going on here? For example, the following test will seg fault.

TEST(SegFaultDemonstration, twoVectors) {

    std::vector<double> vector1{0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,0.99};
    std::vector<double> vector2{0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,0.99};
}

Steps to reproduce the problem

Here's my CMakeLists.txt

# Note: CMake support is community-based. The maintainers do not use CMake
# internally.

cmake_minimum_required(VERSION 3.13)

project(googletest-distribution)
set(GOOGLETEST_VERSION 1.14.0)

if(NOT CYGWIN AND NOT MSYS AND NOT ${CMAKE_SYSTEM_NAME} STREQUAL QNX)
  set(CMAKE_CXX_EXTENSIONS OFF)
endif()

enable_testing()

include(CMakeDependentOption)
include(GNUInstallDirs)

# Note that googlemock target already builds googletest.
option(BUILD_GMOCK "Builds the googlemock subproject" ON)
option(INSTALL_GTEST "Enable installation of googletest. (Projects embedding googletest may want to turn this OFF.)" ON)
option(GTEST_HAS_ABSL "Use Abseil and RE2. Requires Abseil and RE2 to be separately added to the build." OFF)

if(BUILD_GMOCK)
  add_subdirectory( googlemock )
else()
  add_subdirectory( googletest )
endif()
[jose@agrajag googletest]$ vi CMakeLists.txt 
[jose@agrajag googletest]$ cat CMakeLists.txt 
# Note: CMake support is community-based. The maintainers do not use CMake
# internally.

cmake_minimum_required(VERSION 3.13)

project(googletest-distribution)
set(GOOGLETEST_VERSION 1.14.0)

if(NOT CYGWIN AND NOT MSYS AND NOT ${CMAKE_SYSTEM_NAME} STREQUAL QNX)
  set(CMAKE_CXX_EXTENSIONS OFF)
endif()

enable_testing()

include(CMakeDependentOption)
include(GNUInstallDirs)

# Note that googlemock target already builds googletest.
option(BUILD_GMOCK "Builds the googlemock subproject" ON)
option(INSTALL_GTEST "Enable installation of googletest. (Projects embedding googletest may want to turn this OFF.)" ON)
option(GTEST_HAS_ABSL "Use Abseil and RE2. Requires Abseil and RE2 to be separately added to the build." OFF)

if(BUILD_GMOCK)
  add_subdirectory( googlemock )
else()
  add_subdirectory( googletest )
endif()

What version of GoogleTest are you using?

1.14

What operating system and version are you using?

Linux: AlmaLinux 8.5 (Arctic Sphynx)

What compiler and version are you using?

gcc version 8.5.0 20210514 (Red Hat 8.5.0-4) (GCC)

What build system are you using?

cmake version 3.20.2

Additional context

No response