From 8a926830122b6772b97a9dec8b93b2e6f57fe42a Mon Sep 17 00:00:00 2001 From: Mohammad Nejati Date: Sun, 2 Jun 2024 09:52:50 +0000 Subject: [PATCH 1/8] Add tests for calling message with nullptr buffer --- test/error_code_test2.cpp | 3 +++ test/error_condition_test3.cpp | 3 +++ 2 files changed, 6 insertions(+) diff --git a/test/error_code_test2.cpp b/test/error_code_test2.cpp index e423653..aca7a05 100644 --- a/test/error_code_test2.cpp +++ b/test/error_code_test2.cpp @@ -24,6 +24,9 @@ int main() BOOST_TEST_EQ( ec.to_string(), std::string( "system:0" ) ); + // when len is 0 buffer can be nullptr + ec.message( nullptr, 0 ); + { sys::error_code ec2( ec ); diff --git a/test/error_condition_test3.cpp b/test/error_condition_test3.cpp index fefecf3..2c83e10 100644 --- a/test/error_condition_test3.cpp +++ b/test/error_condition_test3.cpp @@ -24,6 +24,9 @@ int main() BOOST_TEST_EQ( en.to_string(), std::string( "cond:generic:0" ) ); + // when len is 0 buffer can be nullptr + en.message( nullptr, 0 ); + { sys::error_condition en2( en ); From 4d4f9065486a9b18879edf12f07deef100411f3a Mon Sep 17 00:00:00 2001 From: Mohammad Nejati Date: Sun, 2 Jun 2024 10:31:24 +0000 Subject: [PATCH 2/8] strerror_r requires non-null buffer pointer Fixes -Wnonnull warnings when calling message with a nullptr buffer --- include/boost/system/detail/generic_category_message.hpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/include/boost/system/detail/generic_category_message.hpp b/include/boost/system/detail/generic_category_message.hpp index ded2db6..3b75ade 100644 --- a/include/boost/system/detail/generic_category_message.hpp +++ b/include/boost/system/detail/generic_category_message.hpp @@ -39,7 +39,12 @@ inline char const * strerror_r_helper( int r, char const * buffer ) noexcept inline char const * generic_error_category_message( int ev, char * buffer, std::size_t len ) noexcept { - return strerror_r_helper( strerror_r( ev, buffer, len ), buffer ); + if ( buffer != nullptr ) + return strerror_r_helper( strerror_r( ev, buffer, len ), buffer ); + + // strerror_r requires non-null buffer pointer + char dummy_buffer[ 1 ]; + return strerror_r_helper( strerror_r( ev, dummy_buffer, 0 ), buffer ); } inline std::string generic_error_category_message( int ev ) From bef2c5ef6ab3e86c25b5908e7ab586cf08fe268a Mon Sep 17 00:00:00 2001 From: Peter Dimov Date: Sun, 2 Jun 2024 22:26:01 +0300 Subject: [PATCH 3/8] Update error_code_test2.cpp --- test/error_code_test2.cpp | 103 +++++++++++++++++++++++++++++++------- 1 file changed, 84 insertions(+), 19 deletions(-) diff --git a/test/error_code_test2.cpp b/test/error_code_test2.cpp index aca7a05..9bed6a5 100644 --- a/test/error_code_test2.cpp +++ b/test/error_code_test2.cpp @@ -11,29 +11,53 @@ namespace sys = boost::system; int main() { - char buffer[ 1024 ]; - - sys::error_code ec; - - BOOST_TEST_EQ( ec.value(), 0 ); - BOOST_TEST( ec.category() == sys::system_category() ); - BOOST_TEST_EQ( ec.message(), ec.category().message( ec.value() ) ); - BOOST_TEST_CSTR_EQ( ec.message( buffer, sizeof( buffer ) ), ec.category().message( ec.value(), buffer, sizeof( buffer ) ) ); - BOOST_TEST( !ec.failed() ); - BOOST_TEST( !ec ); - - BOOST_TEST_EQ( ec.to_string(), std::string( "system:0" ) ); - - // when len is 0 buffer can be nullptr - ec.message( nullptr, 0 ); + char buffer[ 4096 ], buffer2[ 4096 ]; { + sys::error_code ec; + + BOOST_TEST_EQ( ec.value(), 0 ); + BOOST_TEST( ec.category() == sys::system_category() ); + + BOOST_TEST_EQ( ec.message(), ec.category().message( ec.value() ) ); + BOOST_TEST_CSTR_EQ( ec.message( buffer, sizeof( buffer ) ), ec.category().message( ec.value(), buffer2, sizeof( buffer2 ) ) ); + BOOST_TEST_CSTR_EQ( ec.message( buffer, sizeof( buffer ) ), ec.message().c_str() ); + + { + char const* msg = ec.message( nullptr, 0 ); + + if( msg != nullptr ) + { + BOOST_TEST_CSTR_EQ( msg, ec.message().c_str() ); + } + } + + BOOST_TEST( !ec.failed() ); + BOOST_TEST( !ec ); + + BOOST_TEST_EQ( ec.to_string(), std::string( "system:0" ) ); + } + + { + sys::error_code ec; sys::error_code ec2( ec ); BOOST_TEST_EQ( ec2.value(), 0 ); BOOST_TEST( ec2.category() == sys::system_category() ); + BOOST_TEST_EQ( ec2.message(), ec2.category().message( ec2.value() ) ); - BOOST_TEST_CSTR_EQ( ec2.message( buffer, sizeof( buffer ) ), ec2.category().message( ec2.value(), buffer, sizeof( buffer ) ) ); + BOOST_TEST_CSTR_EQ( ec2.message( buffer, sizeof( buffer ) ), ec2.category().message( ec2.value(), buffer2, sizeof( buffer2 ) ) ); + BOOST_TEST_CSTR_EQ( ec2.message( buffer, sizeof( buffer ) ), ec2.message().c_str() ); + + { + char const* msg = ec2.message( nullptr, 0 ); + + if( msg != nullptr ) + { + BOOST_TEST_CSTR_EQ( msg, ec2.message().c_str() ); + } + } + BOOST_TEST( !ec2.failed() ); BOOST_TEST( !ec2 ); @@ -44,12 +68,25 @@ int main() } { + sys::error_code ec; sys::error_code ec2( ec.value(), ec.category() ); BOOST_TEST_EQ( ec2.value(), 0 ); BOOST_TEST( ec2.category() == sys::system_category() ); + BOOST_TEST_EQ( ec2.message(), ec2.category().message( ec2.value() ) ); - BOOST_TEST_CSTR_EQ( ec2.message( buffer, sizeof( buffer ) ), ec2.category().message( ec2.value(), buffer, sizeof( buffer ) ) ); + BOOST_TEST_CSTR_EQ( ec2.message( buffer, sizeof( buffer ) ), ec2.category().message( ec2.value(), buffer2, sizeof( buffer2 ) ) ); + BOOST_TEST_CSTR_EQ( ec2.message( buffer, sizeof( buffer ) ), ec2.message().c_str() ); + + { + char const* msg = ec2.message( nullptr, 0 ); + + if( msg != nullptr ) + { + BOOST_TEST_CSTR_EQ( msg, ec2.message().c_str() ); + } + } + BOOST_TEST( !ec2.failed() ); BOOST_TEST( !ec2 ); @@ -64,12 +101,26 @@ int main() BOOST_TEST_EQ( ec2.value(), 5 ); BOOST_TEST( ec2.category() == sys::generic_category() ); + BOOST_TEST_EQ( ec2.message(), ec2.category().message( ec2.value() ) ); - BOOST_TEST_CSTR_EQ( ec2.message( buffer, sizeof( buffer ) ), ec2.category().message( ec2.value(), buffer, sizeof( buffer ) ) ); + BOOST_TEST_CSTR_EQ( ec2.message( buffer, sizeof( buffer ) ), ec2.category().message( ec2.value(), buffer2, sizeof( buffer2 ) ) ); + BOOST_TEST_CSTR_EQ( ec2.message( buffer, sizeof( buffer ) ), ec2.message().c_str() ); + + { + char const* msg = ec2.message( nullptr, 0 ); + + if( msg != nullptr ) + { + BOOST_TEST_CSTR_EQ( msg, ec2.message().c_str() ); + } + } + BOOST_TEST( ec2.failed() ); BOOST_TEST( ec2 ); BOOST_TEST_NOT( !ec2 ); + sys::error_code ec; + BOOST_TEST_NE( ec, ec2 ); BOOST_TEST_NOT( ec == ec2 ); @@ -81,12 +132,26 @@ int main() BOOST_TEST_EQ( ec2.value(), 5 ); BOOST_TEST( ec2.category() == sys::system_category() ); + BOOST_TEST_EQ( ec2.message(), ec2.category().message( ec2.value() ) ); - BOOST_TEST_CSTR_EQ( ec2.message( buffer, sizeof( buffer ) ), ec2.category().message( ec2.value(), buffer, sizeof( buffer ) ) ); + BOOST_TEST_CSTR_EQ( ec2.message( buffer, sizeof( buffer ) ), ec2.category().message( ec2.value(), buffer2, sizeof( buffer2 ) ) ); + BOOST_TEST_CSTR_EQ( ec2.message( buffer, sizeof( buffer ) ), ec2.message().c_str() ); + + { + char const* msg = ec2.message( nullptr, 0 ); + + if( msg != nullptr ) + { + BOOST_TEST_CSTR_EQ( msg, ec2.message().c_str() ); + } + } + BOOST_TEST( ec2.failed() ); BOOST_TEST( ec2 ); BOOST_TEST_NOT( !ec2 ); + sys::error_code ec; + BOOST_TEST_NE( ec, ec2 ); BOOST_TEST_NOT( ec == ec2 ); From c63bca6eda39f0b1ea559e3c2c7ad50686a0721c Mon Sep 17 00:00:00 2001 From: Peter Dimov Date: Sun, 2 Jun 2024 22:33:43 +0300 Subject: [PATCH 4/8] Update error_condition_test3.cpp --- test/error_condition_test3.cpp | 103 +++++++++++++++++++++++++++------ 1 file changed, 84 insertions(+), 19 deletions(-) diff --git a/test/error_condition_test3.cpp b/test/error_condition_test3.cpp index 2c83e10..8baf858 100644 --- a/test/error_condition_test3.cpp +++ b/test/error_condition_test3.cpp @@ -11,29 +11,53 @@ namespace sys = boost::system; int main() { - char buffer[ 1024 ]; - - sys::error_condition en; - - BOOST_TEST_EQ( en.value(), 0 ); - BOOST_TEST( en.category() == sys::generic_category() ); - BOOST_TEST_EQ( en.message(), en.category().message( en.value() ) ); - BOOST_TEST_CSTR_EQ( en.message( buffer, sizeof( buffer ) ), en.category().message( en.value(), buffer, sizeof( buffer ) ) ); - BOOST_TEST( !en.failed() ); - BOOST_TEST( !en ); - - BOOST_TEST_EQ( en.to_string(), std::string( "cond:generic:0" ) ); - - // when len is 0 buffer can be nullptr - en.message( nullptr, 0 ); + char buffer[ 4096 ], buffer2[ 4096 ]; { + sys::error_condition en; + + BOOST_TEST_EQ( en.value(), 0 ); + BOOST_TEST( en.category() == sys::generic_category() ); + + BOOST_TEST_EQ( en.message(), en.category().message( en.value() ) ); + BOOST_TEST_CSTR_EQ( en.message( buffer, sizeof( buffer ) ), en.category().message( en.value(), buffer2, sizeof( buffer2 ) ) ); + BOOST_TEST_CSTR_EQ( en.message( buffer, sizeof( buffer ) ), en.message().c_str() ); + + { + char const* msg = en.message( nullptr, 0 ); + + if( msg != nullptr ) + { + BOOST_TEST_CSTR_EQ( msg, en.message().c_str() ); + } + } + + BOOST_TEST( !en.failed() ); + BOOST_TEST( !en ); + + BOOST_TEST_EQ( en.to_string(), std::string( "cond:generic:0" ) ); + } + + { + sys::error_condition en; sys::error_condition en2( en ); BOOST_TEST_EQ( en2.value(), 0 ); BOOST_TEST( en2.category() == sys::generic_category() ); + BOOST_TEST_EQ( en2.message(), en2.category().message( en2.value() ) ); - BOOST_TEST_CSTR_EQ( en2.message( buffer, sizeof( buffer ) ), en2.category().message( en2.value(), buffer, sizeof( buffer ) ) ); + BOOST_TEST_CSTR_EQ( en2.message( buffer, sizeof( buffer ) ), en2.category().message( en2.value(), buffer2, sizeof( buffer2 ) ) ); + BOOST_TEST_CSTR_EQ( en2.message( buffer, sizeof( buffer ) ), en2.message().c_str() ); + + { + char const* msg = en2.message( nullptr, 0 ); + + if( msg != nullptr ) + { + BOOST_TEST_CSTR_EQ( msg, en2.message().c_str() ); + } + } + BOOST_TEST( !en2.failed() ); BOOST_TEST( !en2 ); @@ -44,12 +68,25 @@ int main() } { + sys::error_condition en; sys::error_condition en2( en.value(), en.category() ); BOOST_TEST_EQ( en2.value(), 0 ); BOOST_TEST( en2.category() == sys::generic_category() ); + BOOST_TEST_EQ( en2.message(), en2.category().message( en2.value() ) ); - BOOST_TEST_CSTR_EQ( en2.message( buffer, sizeof( buffer ) ), en2.category().message( en2.value(), buffer, sizeof( buffer ) ) ); + BOOST_TEST_CSTR_EQ( en2.message( buffer, sizeof( buffer ) ), en2.category().message( en2.value(), buffer2, sizeof( buffer2 ) ) ); + BOOST_TEST_CSTR_EQ( en2.message( buffer, sizeof( buffer ) ), en2.message().c_str() ); + + { + char const* msg = en2.message( nullptr, 0 ); + + if( msg != nullptr ) + { + BOOST_TEST_CSTR_EQ( msg, en2.message().c_str() ); + } + } + BOOST_TEST( !en2.failed() ); BOOST_TEST( !en2 ); @@ -64,12 +101,26 @@ int main() BOOST_TEST_EQ( en2.value(), 5 ); BOOST_TEST( en2.category() == sys::generic_category() ); + BOOST_TEST_EQ( en2.message(), en2.category().message( en2.value() ) ); - BOOST_TEST_CSTR_EQ( en2.message( buffer, sizeof( buffer ) ), en2.category().message( en2.value(), buffer, sizeof( buffer ) ) ); + BOOST_TEST_CSTR_EQ( en2.message( buffer, sizeof( buffer ) ), en2.category().message( en2.value(), buffer2, sizeof( buffer2 ) ) ); + BOOST_TEST_CSTR_EQ( en2.message( buffer, sizeof( buffer ) ), en2.message().c_str() ); + + { + char const* msg = en2.message( nullptr, 0 ); + + if( msg != nullptr ) + { + BOOST_TEST_CSTR_EQ( msg, en2.message().c_str() ); + } + } + BOOST_TEST( en2.failed() ); BOOST_TEST( en2 ); BOOST_TEST_NOT( !en2 ); + sys::error_condition en; + BOOST_TEST_NE( en, en2 ); BOOST_TEST_NOT( en == en2 ); @@ -81,12 +132,26 @@ int main() BOOST_TEST_EQ( en2.value(), 5 ); BOOST_TEST( en2.category() == sys::system_category() ); + BOOST_TEST_EQ( en2.message(), en2.category().message( en2.value() ) ); - BOOST_TEST_CSTR_EQ( en2.message( buffer, sizeof( buffer ) ), en2.category().message( en2.value(), buffer, sizeof( buffer ) ) ); + BOOST_TEST_CSTR_EQ( en2.message( buffer, sizeof( buffer ) ), en2.category().message( en2.value(), buffer2, sizeof( buffer2 ) ) ); + BOOST_TEST_CSTR_EQ( en2.message( buffer, sizeof( buffer ) ), en2.message().c_str() ); + + { + char const* msg = en2.message( nullptr, 0 ); + + if( msg != nullptr ) + { + BOOST_TEST_CSTR_EQ( msg, en2.message().c_str() ); + } + } + BOOST_TEST( en2.failed() ); BOOST_TEST( en2 ); BOOST_TEST_NOT( !en2 ); + sys::error_condition en; + BOOST_TEST_NE( en, en2 ); BOOST_TEST_NOT( en == en2 ); From d1fb7554c543b31620607088f9d5a77b67190b74 Mon Sep 17 00:00:00 2001 From: Peter Dimov Date: Sun, 2 Jun 2024 22:41:48 +0300 Subject: [PATCH 5/8] Update error_code_test2, error_condition_test3 --- test/error_code_test2.cpp | 62 ++++++++++++++++++++++++++++++++++ test/error_condition_test3.cpp | 62 ++++++++++++++++++++++++++++++++++ 2 files changed, 124 insertions(+) diff --git a/test/error_code_test2.cpp b/test/error_code_test2.cpp index 9bed6a5..6d48651 100644 --- a/test/error_code_test2.cpp +++ b/test/error_code_test2.cpp @@ -127,6 +127,37 @@ int main() BOOST_TEST_EQ( ec2.to_string(), std::string( "generic:5" ) ); } + { + sys::error_code ec2( -4, sys::generic_category() ); + + BOOST_TEST_EQ( ec2.value(), -4 ); + BOOST_TEST( ec2.category() == sys::generic_category() ); + + BOOST_TEST_EQ( ec2.message(), ec2.category().message( ec2.value() ) ); + BOOST_TEST_CSTR_EQ( ec2.message( buffer, sizeof( buffer ) ), ec2.category().message( ec2.value(), buffer2, sizeof( buffer2 ) ) ); + BOOST_TEST_CSTR_EQ( ec2.message( buffer, sizeof( buffer ) ), ec2.message().c_str() ); + + { + char const* msg = ec2.message( nullptr, 0 ); + + if( msg != nullptr ) + { + BOOST_TEST_CSTR_EQ( msg, ec2.message().c_str() ); + } + } + + BOOST_TEST( ec2.failed() ); + BOOST_TEST( ec2 ); + BOOST_TEST_NOT( !ec2 ); + + sys::error_code ec; + + BOOST_TEST_NE( ec, ec2 ); + BOOST_TEST_NOT( ec == ec2 ); + + BOOST_TEST_EQ( ec2.to_string(), std::string( "generic:-4" ) ); + } + { sys::error_code ec2( 5, sys::system_category() ); @@ -158,5 +189,36 @@ int main() BOOST_TEST_EQ( ec2.to_string(), std::string( "system:5" ) ); } + { + sys::error_code ec2( -4, sys::system_category() ); + + BOOST_TEST_EQ( ec2.value(), -4 ); + BOOST_TEST( ec2.category() == sys::system_category() ); + + BOOST_TEST_EQ( ec2.message(), ec2.category().message( ec2.value() ) ); + BOOST_TEST_CSTR_EQ( ec2.message( buffer, sizeof( buffer ) ), ec2.category().message( ec2.value(), buffer2, sizeof( buffer2 ) ) ); + BOOST_TEST_CSTR_EQ( ec2.message( buffer, sizeof( buffer ) ), ec2.message().c_str() ); + + { + char const* msg = ec2.message( nullptr, 0 ); + + if( msg != nullptr ) + { + BOOST_TEST_CSTR_EQ( msg, ec2.message().c_str() ); + } + } + + BOOST_TEST( ec2.failed() ); + BOOST_TEST( ec2 ); + BOOST_TEST_NOT( !ec2 ); + + sys::error_code ec; + + BOOST_TEST_NE( ec, ec2 ); + BOOST_TEST_NOT( ec == ec2 ); + + BOOST_TEST_EQ( ec2.to_string(), std::string( "system:-4" ) ); + } + return boost::report_errors(); } diff --git a/test/error_condition_test3.cpp b/test/error_condition_test3.cpp index 8baf858..0ab839d 100644 --- a/test/error_condition_test3.cpp +++ b/test/error_condition_test3.cpp @@ -127,6 +127,37 @@ int main() BOOST_TEST_EQ( en2.to_string(), std::string( "cond:generic:5" ) ); } + { + sys::error_condition en2( -4, sys::generic_category() ); + + BOOST_TEST_EQ( en2.value(), -4 ); + BOOST_TEST( en2.category() == sys::generic_category() ); + + BOOST_TEST_EQ( en2.message(), en2.category().message( en2.value() ) ); + BOOST_TEST_CSTR_EQ( en2.message( buffer, sizeof( buffer ) ), en2.category().message( en2.value(), buffer2, sizeof( buffer2 ) ) ); + BOOST_TEST_CSTR_EQ( en2.message( buffer, sizeof( buffer ) ), en2.message().c_str() ); + + { + char const* msg = en2.message( nullptr, 0 ); + + if( msg != nullptr ) + { + BOOST_TEST_CSTR_EQ( msg, en2.message().c_str() ); + } + } + + BOOST_TEST( en2.failed() ); + BOOST_TEST( en2 ); + BOOST_TEST_NOT( !en2 ); + + sys::error_condition en; + + BOOST_TEST_NE( en, en2 ); + BOOST_TEST_NOT( en == en2 ); + + BOOST_TEST_EQ( en2.to_string(), std::string( "cond:generic:-4" ) ); + } + { sys::error_condition en2( 5, sys::system_category() ); @@ -158,5 +189,36 @@ int main() BOOST_TEST_EQ( en2.to_string(), std::string( "cond:system:5" ) ); } + { + sys::error_condition en2( -4, sys::system_category() ); + + BOOST_TEST_EQ( en2.value(), -4 ); + BOOST_TEST( en2.category() == sys::system_category() ); + + BOOST_TEST_EQ( en2.message(), en2.category().message( en2.value() ) ); + BOOST_TEST_CSTR_EQ( en2.message( buffer, sizeof( buffer ) ), en2.category().message( en2.value(), buffer2, sizeof( buffer2 ) ) ); + BOOST_TEST_CSTR_EQ( en2.message( buffer, sizeof( buffer ) ), en2.message().c_str() ); + + { + char const* msg = en2.message( nullptr, 0 ); + + if( msg != nullptr ) + { + BOOST_TEST_CSTR_EQ( msg, en2.message().c_str() ); + } + } + + BOOST_TEST( en2.failed() ); + BOOST_TEST( en2 ); + BOOST_TEST_NOT( !en2 ); + + sys::error_condition en; + + BOOST_TEST_NE( en, en2 ); + BOOST_TEST_NOT( en == en2 ); + + BOOST_TEST_EQ( en2.to_string(), std::string( "cond:system:-4" ) ); + } + return boost::report_errors(); } From 38d63aaf7c6106f820cad79334e0f9c0b17b509e Mon Sep 17 00:00:00 2001 From: Peter Dimov Date: Sun, 2 Jun 2024 23:03:24 +0300 Subject: [PATCH 6/8] strerror_r(ev, tmp, 0) may return tmp --- .../system/detail/generic_category_message.hpp | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/include/boost/system/detail/generic_category_message.hpp b/include/boost/system/detail/generic_category_message.hpp index 3b75ade..d2f2e41 100644 --- a/include/boost/system/detail/generic_category_message.hpp +++ b/include/boost/system/detail/generic_category_message.hpp @@ -39,12 +39,19 @@ inline char const * strerror_r_helper( int r, char const * buffer ) noexcept inline char const * generic_error_category_message( int ev, char * buffer, std::size_t len ) noexcept { - if ( buffer != nullptr ) + if( buffer != nullptr ) + { return strerror_r_helper( strerror_r( ev, buffer, len ), buffer ); + } + else + { + // strerror_r requires non-null buffer pointer - // strerror_r requires non-null buffer pointer - char dummy_buffer[ 1 ]; - return strerror_r_helper( strerror_r( ev, dummy_buffer, 0 ), buffer ); + char tmp[ 1 ]; + char const* r = strerror_r_helper( strerror_r( ev, tmp, 0 ), buffer ); + + return r == tmp? nullptr: r; + } } inline std::string generic_error_category_message( int ev ) From 41ff095c0a77ba9528cb7c6e540612f96b818dcc Mon Sep 17 00:00:00 2001 From: Peter Dimov Date: Mon, 3 Jun 2024 02:40:13 +0300 Subject: [PATCH 7/8] Try to fix the false positive with GCC ASAN --- include/boost/system/detail/generic_category_message.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/boost/system/detail/generic_category_message.hpp b/include/boost/system/detail/generic_category_message.hpp index d2f2e41..611ce37 100644 --- a/include/boost/system/detail/generic_category_message.hpp +++ b/include/boost/system/detail/generic_category_message.hpp @@ -47,7 +47,7 @@ inline char const * generic_error_category_message( int ev, char * buffer, std:: { // strerror_r requires non-null buffer pointer - char tmp[ 1 ]; + char tmp[ 1 ] = {}; char const* r = strerror_r_helper( strerror_r( ev, tmp, 0 ), buffer ); return r == tmp? nullptr: r; From 5d5ecb74a7eabbc7968a6a7d8dcf17c291649105 Mon Sep 17 00:00:00 2001 From: Peter Dimov Date: Mon, 3 Jun 2024 03:01:59 +0300 Subject: [PATCH 8/8] Update .drone.jsonnet --- .drone.jsonnet | 55 +++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 45 insertions(+), 10 deletions(-) diff --git a/.drone.jsonnet b/.drone.jsonnet index 6be869b..f8881be 100644 --- a/.drone.jsonnet +++ b/.drone.jsonnet @@ -189,16 +189,16 @@ local windows_pipeline(name, image, environment, arch = "amd64") = ), linux_pipeline( - "Linux 22.04 GCC 12 32 ASAN", + "Linux 22.04 GCC 12 32", "cppalliance/droneubuntu2204:1", - { TOOLSET: 'gcc', COMPILER: 'g++-12', CXXSTD: '11,14,17,20,2b', ADDRMD: '32' } + asan, + { TOOLSET: 'gcc', COMPILER: 'g++-12', CXXSTD: '11,14,17,20,2b', ADDRMD: '32' }, "g++-12-multilib", ), linux_pipeline( - "Linux 22.04 GCC 12 64 ASAN", + "Linux 22.04 GCC 12 64", "cppalliance/droneubuntu2204:1", - { TOOLSET: 'gcc', COMPILER: 'g++-12', CXXSTD: '11,14,17,20,2b', ADDRMD: '64' } + asan, + { TOOLSET: 'gcc', COMPILER: 'g++-12', CXXSTD: '11,14,17,20,2b', ADDRMD: '64' }, "g++-12-multilib", ), @@ -216,6 +216,34 @@ local windows_pipeline(name, image, environment, arch = "amd64") = "g++-13-multilib", ), + linux_pipeline( + "Linux 23.04 GCC 13 32 ASAN", + "cppalliance/droneubuntu2304:1", + { TOOLSET: 'gcc', COMPILER: 'g++-13', CXXSTD: '11,14,17,20,2b', ADDRMD: '32' } + asan, + "g++-13-multilib", + ), + + linux_pipeline( + "Linux 23.04 GCC 13 64 ASAN", + "cppalliance/droneubuntu2304:1", + { TOOLSET: 'gcc', COMPILER: 'g++-13', CXXSTD: '11,14,17,20,2b', ADDRMD: '64' } + asan, + "g++-13-multilib", + ), + + linux_pipeline( + "Linux 24.04 GCC 14 32", + "cppalliance/droneubuntu2404:1", + { TOOLSET: 'gcc', COMPILER: 'g++-14', CXXSTD: '11,14,17,20,2b', ADDRMD: '32' }, + "g++-14-multilib", + ), + + linux_pipeline( + "Linux 24.04 GCC 14 64", + "cppalliance/droneubuntu2404:1", + { TOOLSET: 'gcc', COMPILER: 'g++-14', CXXSTD: '11,14,17,20,2b', ADDRMD: '64' }, + "g++-14-multilib", + ), + linux_pipeline( "Linux 16.04 Clang 3.5", "cppalliance/droneubuntu1604:1", @@ -273,17 +301,24 @@ local windows_pipeline(name, image, environment, arch = "amd64") = ), linux_pipeline( - "Linux 23.10 Clang 17 UBSAN", + "Linux 23.10 Clang 17", "cppalliance/droneubuntu2310:1", - { TOOLSET: 'clang', COMPILER: 'clang++-17', CXXSTD: '11,14,17,20,2b' } + ubsan, + { TOOLSET: 'clang', COMPILER: 'clang++-17', CXXSTD: '11,14,17,20,2b' }, "clang-17", ), linux_pipeline( - "Linux 23.10 Clang 17 ASAN", - "cppalliance/droneubuntu2310:1", - { TOOLSET: 'clang', COMPILER: 'clang++-17', CXXSTD: '11,14,17,20,2b' } + asan, - "clang-17", + "Linux 24.04 Clang 18 UBSAN", + "cppalliance/droneubuntu2404:1", + { TOOLSET: 'clang', COMPILER: 'clang++-18', CXXSTD: '11,14,17,20,2b' } + ubsan, + "clang-18", + ), + + linux_pipeline( + "Linux 24.04 Clang 18 ASAN", + "cppalliance/droneubuntu2404:1", + { TOOLSET: 'clang', COMPILER: 'clang++-18', CXXSTD: '11,14,17,20,2b' } + asan, + "clang-18", ), macos_pipeline(