PhoebeHui opened a new issue, #50244:
URL: https://github.com/apache/arrow/issues/50244
### Describe the bug, including details regarding any error messages,
version, and platform.
### Describe the bug, including details regarding any error messages,
version, and platform.
When I run arrow test with VS2022 msvc x64 configuration, the test
'arrow-utility-test' failed with container-overflow error, could you please
take a look?
Steps to reproduce:
```
1. Open VS2022 x86 Native Command Prompt tools
2. Clone repo and checkout 0249a2e
3. set _CL_=/fsanitize=address /GS- /wd5072 & set _LINK_=/InferASanLibs
/incremental:no /debug
4. cd to build folder: cd /d C:\gitP\apache\arrow\cpp\build_amd64
5. cmake -G "Visual Studio 17 2022" -A x64
-DCMAKE_SYSTEM_VERSION=10.0.26100.0 -DARROW_BUILD_TESTS=ON -DARROW_ACERO=ON
-DARROW_FILESYSTEM=ON -DARROW_PARQUET=OFF -DARROW_SUBSTRAIT=ON
-DARROW_DATASET=ON
6. msbuild /m /p:Platform=x64 /p:Configuration=Release arrow.sln /t:Rebuild
7.set ARROW_TEST_DATA=C:\gitP\apache\arrow\testing\data
8.ctest -C Release --output-on-failure -R "arrow-utility-test"
```
Memory safety issue reported by Address Sanitizer:
```
==6460==ERROR: AddressSanitizer: container-overflow on address
0x1298940cf031 at pc 0x7ffed5c28155 bp 0x00fb34d6e0c0 sp 0x00fb34d6d848
READ of size 42 at 0x1298940cf031 thread T0
#0 0x7ffed5c28154 in MemcmpInterceptorCommon(void *, int (__cdecl
*)(void const *, void const *, unsigned __int64), void const *, void const *,
unsigned __int64)
C:\repos\msvc\src\vctools\asan\llvm\compiler-rt\lib\sanitizer_common\sanitizer_common_interceptors.inc:896
#1 0x7ffed5c20600 in memcmp
C:\repos\msvc\src\vctools\asan\llvm\compiler-rt\lib\sanitizer_common\sanitizer_common_interceptors.inc:928
#2 0x7ff72ef855c8 in testing::internal::CmpHelperEQ<class
std::basic_string_view<char, struct std::char_traits<char>>, class
std::basic_string_view<char, struct std::char_traits<char>>>(char const *, char
const *, class std::basic_string_view<char, struct std::char_traits<char>>
const &, class std::basic_string_view<char, struct std::char_traits<char>>
const &)
(C:\gitP\apache\arrow\cpp\build_amd64\release\Release\arrow-utility-test.exe+0x1405a55c8)
#3 0x7ff72ef88189 in arrow::util::test::IsSecurelyCleared(class
std::basic_string_view<char, struct std::char_traits<char>> const &)
(C:\gitP\apache\arrow\cpp\build_amd64\release\Release\arrow-utility-test.exe+0x1405a8189)
#4 0x7ff72ef72ffd in
arrow::util::test::TestSecureString_AssertSecurelyCleared_Test::TestBody(void)
(C:\gitP\apache\arrow\cpp\build_amd64\release\Release\arrow-utility-test.exe+0x140592ffd)
#5 0x7fff05898986 in
testing::internal::HandleSehExceptionsInMethodIfSupported<class testing::Test,
void>(class testing::Test *, void (__cdecl testing::Test::*)(void), char const
*)
(C:\gitP\apache\arrow\cpp\build_amd64\release\Release\arrow_gmock_main.dll+0x180008986)
#6 0x7fff058984db in
testing::internal::HandleExceptionsInMethodIfSupported<class testing::Test,
void>(class testing::Test *, void (__cdecl testing::Test::*)(void), char const
*)
(C:\gitP\apache\arrow\cpp\build_amd64\release\Release\arrow_gmock_main.dll+0x1800084db)
#7 0x7fff0590645c in testing::Test::Run(void)
(C:\gitP\apache\arrow\cpp\build_amd64\release\Release\arrow_gmock_main.dll+0x18007645c)
#8 0x7fff05906721 in testing::TestInfo::Run(void)
(C:\gitP\apache\arrow\cpp\build_amd64\release\Release\arrow_gmock_main.dll+0x180076721)
#9 0x7fff05906b43 in testing::TestSuite::Run(void)
(C:\gitP\apache\arrow\cpp\build_amd64\release\Release\arrow_gmock_main.dll+0x180076b43)
#10 0x7fff05908491 in testing::internal::UnitTestImpl::RunAllTests(void)
(C:\gitP\apache\arrow\cpp\build_amd64\release\Release\arrow_gmock_main.dll+0x180078491)
#11 0x7fff058989e6 in
testing::internal::HandleSehExceptionsInMethodIfSupported<class
testing::internal::UnitTestImpl, bool>(class testing::internal::UnitTestImpl *,
bool (__cdecl testing::internal::UnitTestImpl::*)(void), char const *)
(C:\gitP\apache\arrow\cpp\build_amd64\release\Release\arrow_gmock_main.dll+0x1800089e6)
#12 0x7fff058988d9 in
testing::internal::HandleExceptionsInMethodIfSupported<class
testing::internal::UnitTestImpl, bool>(class testing::internal::UnitTestImpl *,
bool (__cdecl testing::internal::UnitTestImpl::*)(void), char const *)
(C:\gitP\apache\arrow\cpp\build_amd64\release\Release\arrow_gmock_main.dll+0x1800088d9)
#13 0x7fff05906fab in testing::UnitTest::Run(void)
(C:\gitP\apache\arrow\cpp\build_amd64\release\Release\arrow_gmock_main.dll+0x180076fab)
#14 0x7ff72eef1dce in main
(C:\gitP\apache\arrow\cpp\build_amd64\release\Release\arrow-utility-test.exe+0x140511dce)
#15 0x7ff72f23ccae in invoke_main
C:\repos\msvc\src\vctools\crt\vcstartup\src\startup\exe_common.inl:78
#16 0x7ff72f23ccae in __scrt_common_main_seh
C:\repos\msvc\src\vctools\crt\vcstartup\src\startup\exe_common.inl:288
#17 0x7fff8bf5e956 (C:\WINDOWS\System32\KERNEL32.DLL+0x18002e956)
#18 0x7fff8db47c1b (C:\WINDOWS\SYSTEM32\ntdll.dll+0x180087c1b)
0x1298940cf040 is located 0 bytes after 48-byte region
[0x1298940cf010,0x1298940cf040)
allocated by thread T0 here:
#0 0x7ff72f23baf5 in operator new(unsigned __int64)
C:\repos\msvc\src\vctools\asan\llvm\compiler-rt\lib\asan\asan_win_new_scalar_thunk.cpp:40
#1 0x7ff72ea65951 in std::_Allocate<16, struct
std::_Default_allocate_traits>(unsigned __int64)
(C:\gitP\apache\arrow\cpp\build_amd64\release\Release\arrow-utility-test.exe+0x140085951)
#2 0x7ff72ea659e9 in std::basic_string<char, struct
std::char_traits<char>, class
std::allocator<char>>::_Allocate_for_capacity<0>(class std::allocator<char> &,
unsigned __int64 &)
(C:\gitP\apache\arrow\cpp\build_amd64\release\Release\arrow-utility-test.exe+0x1400859e9)
#3 0x7ff72ea65f96 in std::basic_string<char, struct
std::char_traits<char>, class std::allocator<char>>::_Construct<2, char const
*>(char const *const, unsigned __int64)
(C:\gitP\apache\arrow\cpp\build_amd64\release\Release\arrow-utility-test.exe+0x140085f96)
#4 0x7ff72ef72f43 in
arrow::util::test::TestSecureString_AssertSecurelyCleared_Test::TestBody(void)
(C:\gitP\apache\arrow\cpp\build_amd64\release\Release\arrow-utility-test.exe+0x140592f43)
#5 0x7fff05898986 in
testing::internal::HandleSehExceptionsInMethodIfSupported<class testing::Test,
void>(class testing::Test *, void (__cdecl testing::Test::*)(void), char const
*)
(C:\gitP\apache\arrow\cpp\build_amd64\release\Release\arrow_gmock_main.dll+0x180008986)
#6 0x7fff058984db in
testing::internal::HandleExceptionsInMethodIfSupported<class testing::Test,
void>(class testing::Test *, void (__cdecl testing::Test::*)(void), char const
*)
(C:\gitP\apache\arrow\cpp\build_amd64\release\Release\arrow_gmock_main.dll+0x1800084db)
#7 0x7fff0590645c in testing::Test::Run(void)
(C:\gitP\apache\arrow\cpp\build_amd64\release\Release\arrow_gmock_main.dll+0x18007645c)
#8 0x7fff05906721 in testing::TestInfo::Run(void)
(C:\gitP\apache\arrow\cpp\build_amd64\release\Release\arrow_gmock_main.dll+0x180076721)
#9 0x7fff05906b43 in testing::TestSuite::Run(void)
(C:\gitP\apache\arrow\cpp\build_amd64\release\Release\arrow_gmock_main.dll+0x180076b43)
#10 0x7fff05908491 in testing::internal::UnitTestImpl::RunAllTests(void)
(C:\gitP\apache\arrow\cpp\build_amd64\release\Release\arrow_gmock_main.dll+0x180078491)
#11 0x7fff058989e6 in
testing::internal::HandleSehExceptionsInMethodIfSupported<class
testing::internal::UnitTestImpl, bool>(class testing::internal::UnitTestImpl *,
bool (__cdecl testing::internal::UnitTestImpl::*)(void), char const *)
(C:\gitP\apache\arrow\cpp\build_amd64\release\Release\arrow_gmock_main.dll+0x1800089e6)
#12 0x7fff058988d9 in
testing::internal::HandleExceptionsInMethodIfSupported<class
testing::internal::UnitTestImpl, bool>(class testing::internal::UnitTestImpl *,
bool (__cdecl testing::internal::UnitTestImpl::*)(void), char const *)
(C:\gitP\apache\arrow\cpp\build_amd64\release\Release\arrow_gmock_main.dll+0x1800088d9)
#13 0x7fff05906fab in testing::UnitTest::Run(void)
(C:\gitP\apache\arrow\cpp\build_amd64\release\Release\arrow_gmock_main.dll+0x180076fab)
#14 0x7ff72eef1dce in main
(C:\gitP\apache\arrow\cpp\build_amd64\release\Release\arrow-utility-test.exe+0x140511dce)
#15 0x7ff72f23ccae in invoke_main
C:\repos\msvc\src\vctools\crt\vcstartup\src\startup\exe_common.inl:78
#16 0x7ff72f23ccae in __scrt_common_main_seh
C:\repos\msvc\src\vctools\crt\vcstartup\src\startup\exe_common.inl:288
#17 0x7fff8bf5e956 (C:\WINDOWS\System32\KERNEL32.DLL+0x18002e956)
#18 0x7fff8db47c1b (C:\WINDOWS\SYSTEM32\ntdll.dll+0x180087c1b)
HINT: if you don't care about these errors you may set
ASAN_OPTIONS=detect_container_overflow=0.
Or if supported by the container library, pass
-D__SANITIZER_DISABLE_CONTAINER_OVERFLOW__ to the compiler to disable
instrumentation.
If you suspect a false positive see also:
https://github.com/google/sanitizers/wiki/AddressSanitizerContainerOverflow.
SUMMARY: AddressSanitizer: container-overflow
(C:\gitP\apache\arrow\cpp\build_amd64\release\Release\arrow-utility-test.exe+0x1405a55c8)
in testing::internal::CmpHelperEQ<class std::basic_string_view<char, struct
std::char_traits<char>>, class std::basic_string_view<char, struct
std::char_traits<char>>>(char const *, char const *, class
std::basic_string_view<char, struct std::char_traits<char>> const &, class
std::basic_string_view<char, struct std::char_traits<char>> const &)
Shadow bytes around the buggy address:
0x1298940ced80: fa fa fd fd fd fd fd fd fa fa fd fd fd fd fd fa
0x1298940cee00: fa fa fd fd fd fd fd fa fa fa fd fd fd fd fd fa
0x1298940cee80: fa fa fd fd fd fd fd fd fa fa fd fd fd fd fd fd
0x1298940cef00: fa fa fd fd fd fd fd fd fa fa fd fd fd fd fd fd
0x1298940cef80: fa fa fd fd fd fd fd fd fa fa 00 00 00 00 00 03
=>0x1298940cf000: fa fa 00 00 00 00[01]fc fa fa 00 00 00 00 00 03
0x1298940cf080: fa fa fd fd fd fd fd fd fa fa fd fd fd fd fd fa
0x1298940cf100: fa fa fd fd fd fd fd fa fa fa fa fa fa fa fa fa
0x1298940cf180: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x1298940cf200: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x1298940cf280: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
Shadow byte legend (one shadow byte represents 8 application bytes):
Addressable: 00
Partially addressable: 01 02 03 04 05 06 07
Heap left redzone: fa
Freed heap region: fd
Stack left redzone: f1
Stack mid redzone: f2
Stack right redzone: f3
Stack after return: f5
Stack use after scope: f8
Global redzone: f9
Global init order: f6
Poisoned by user: f7
Container overflow: fc
Array cookie: ac
Intra object redzone: bb
ASan internal: fe
Left alloca redzone: ca
Right alloca redzone: cb
NOTE: the stack trace above identifies the code that *accessed* the poisoned
memory.
HINT: To identify the code that *poisoned* the memory, try the experimental
setting ASAN_OPTIONS=poison_history_size=<size>.
==6460==ABORTING
```
### Component(s)
C++
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]