https://github.com/Kitware/CMake
Revision ee9805ccd17670e945e41e62f160bfdd9ad8a386 authored by Brad King on 20 October 2022, 21:59:03 UTC, committed by Brad King on 20 October 2022, 22:31:50 UTC
The `remove_filename` and `replace_extension` methods compute an offset between the whole path in a `std::string` and a part of a path in a `std::string_view`. This is done by subtracting their `.data()` pointers. However, C++17 adds a non-const `.data()` through which modification of the string is allowed. This means the copy-on-write implementation used by the pre-C++11 std::string GNU ABI must reallocate if the string has been copied. Our subtraction then computes an offset between two different allocations, which is undefined behavior. The workaround in commit b3ca4f9ad1 (cm/filesystem: Work around crash when compiled for CYGWIN/MSYS runtime, 2021-04-22, v3.21.0-rc1~271^2~2) avoided the problem by calling the non-const `.data()` to reallocate before constructing the `string_view`. Instead, explicitly call the const `.data()` method on the string, which does not reallocate. Fixes: #22090, #23328
1 parent 96172ba
Tip revision: ee9805ccd17670e945e41e62f160bfdd9ad8a386 authored by Brad King on 20 October 2022, 21:59:03 UTC
cm/filesystem: Fix crash with pre-C++11 std::string GNU ABI in C++17
cm/filesystem: Fix crash with pre-C++11 std::string GNU ABI in C++17
Tip revision: ee9805c
File | Mode | Size |
---|---|---|
.github | ||
.gitlab | ||
Auxiliary | ||
Help | ||
Licenses | ||
Modules | ||
Packaging | ||
Source | ||
Templates | ||
Tests | ||
Utilities | ||
.clang-format | -rw-r--r-- | 1.4 KB |
.clang-tidy | -rw-r--r-- | 1.3 KB |
.codespellrc | -rw-r--r-- | 570 bytes |
.editorconfig | -rw-r--r-- | 164 bytes |
.gitattributes | -rw-r--r-- | 1.2 KB |
.gitignore | -rw-r--r-- | 280 bytes |
.gitlab-ci.yml | -rw-r--r-- | 20.9 KB |
.hooks-config | -rw-r--r-- | 418 bytes |
CMakeCPack.cmake | -rw-r--r-- | 9.8 KB |
CMakeCPackOptions.cmake.in | -rw-r--r-- | 11.9 KB |
CMakeGraphVizOptions.cmake | -rw-r--r-- | 153 bytes |
CMakeLists.txt | -rw-r--r-- | 34.6 KB |
CMakeLogo.gif | -rw-r--r-- | 4.4 KB |
CONTRIBUTING.rst | -rw-r--r-- | 3.0 KB |
CTestConfig.cmake | -rw-r--r-- | 566 bytes |
CTestCustom.cmake.in | -rw-r--r-- | 6.6 KB |
CompileFlags.cmake | -rw-r--r-- | 4.7 KB |
Copyright.txt | -rw-r--r-- | 5.3 KB |
DartConfig.cmake | -rw-r--r-- | 374 bytes |
README.rst | -rw-r--r-- | 3.9 KB |
bootstrap | -rwxr-xr-x | 63.0 KB |
cmake_uninstall.cmake.in | -rw-r--r-- | 789 bytes |
configure | -rwxr-xr-x | 99 bytes |
doxygen.config | -rw-r--r-- | 27.4 KB |
![swh spinner](/static/img/swh-spinner.gif)
Computing file changes ...