brainboxdotcc / DPP

C++ Discord API Bot Library - D++ is Lightweight and scalable for small and huge bots!
https://dpp.dev/
Apache License 2.0
1.04k stars 158 forks source link

certain error types from discord API can cause a core dump #1125

Closed braindigitalis closed 3 months ago

braindigitalis commented 4 months ago

Describe the bug Certain error responses can cause a core dump when calling get_error() on a http reply.

To Reproduce Send an embed with > 6000 characters. Not always repeatable.

Expected behavior There should be no crash

Core Dump

#9  0x00007f5edf4396c3 in nlohmann::json_abi_v3_11_2::detail::iter_impl<nlohmann::json_abi_v3_11_2::basic_json<std::map, std::vector, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, bool, long, unsigned long, double, std::allocator, nlohmann::json_abi_v3_11_2::adl_serializer, std::vector<unsigned char, std::allocator<unsigned char> > > >::key() const () from /usr/local/lib/libdpp.so.10.0.30
#10 0x00007f5edf436323 in dpp::(anonymous namespace)::find_errors_in_array(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned long, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, nlohmann::json_abi_v3_11_2::detail::iter_impl<nlohmann::json_abi_v3_11_2::basic_json<std::map, std::vector, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, bool, long, unsigned long, double, std::allocator, nlohmann::json_abi_v3_11_2::adl_serializer, std::vector<unsigned char, std::allocator<unsigned char> > > >, nlohmann::json_abi_v3_11_2::detail::iter_impl<nlohmann::json_abi_v3_11_2::basic_json<std::map, std::vector, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, bool, long, unsigned long, double, std::allocator, nlohmann::json_abi_v3_11_2::adl_serializer, std::vector<unsigned char, std::allocator<unsigned char> > > >) () from /usr/local/lib/libdpp.so.10.0.30
#11 0x00007f5edf436397 in dpp::(anonymous namespace)::find_errors_in_array(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned long, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, nlohmann::json_abi_v3_11_2::detail::iter_impl<nlohmann::json_abi_v3_11_2::basic_json<std::map, std::vector, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, bool, long, unsigned long, double, std::allocator, nlohmann::json_abi_v3_11_2::adl_serializer, std::vector<unsigned char, std::allocator<unsigned char> > > >, nlohmann::json_abi_v3_11_2::detail::iter_impl<nlohmann::json_abi_v3_11_2::basic_json<std::map, std::vector, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, bool, long, unsigned long, double, std::allocator, nlohmann::json_abi_v3_11_2::adl_serializer, std::vector<unsigned char, std::allocator<unsigned char> > > >) () from /usr/local/lib/libdpp.so.10.0.30
#12 0x00007f5edf437378 in dpp::confirmation_callback_t::get_error() const () from /usr/local/lib/libdpp.so.10.0.30
#13 0x00007f5edf7dc2d1 in dpp::utility::log_error()::{lambda(dpp::confirmation_callback_t const&)#1}::operator()(dpp::confirmation_callback_t const&) const ()
   from /usr/local/lib/libdpp.so.10.0.30
#14 0x00007f5edf7dea85 in void std::__invoke_impl<void, dpp::utility::log_error()::{lambda(dpp::confirmation_callback_t const&)#1}&, dpp::confirmation_callback_t const&>(std::__invoke_other, dpp::utility::log_error()::{lambda(dpp::confirmation_callback_t const&)#1}&, dpp::confirmation_callback_t const&) ()
   from /usr/local/lib/libdpp.so.10.0.30
#15 0x00007f5edf7de85d in std::enable_if<is_invocable_r_v<void, dpp::utility::log_error()::{lambda(dpp::confirmation_callback_t const&)#1}&, dpp::confirmation_callback_t const&>, void>::type std::__invoke_r<void, dpp::utility::log_error()::{lambda(dpp::confirmation_callback_t const&)#1}&, dpp::confirmation_callback_t const&>(dpp::utility::log_error()::{lambda(dpp::confirmation_callback_t const&)#1}&, dpp::confirmation_callback_t const&) () from /usr/local/lib/libdpp.so.10.0.30
#16 0x00007f5edf7de398 in std::_Function_handler<void (dpp::confirmation_callback_t const&), dpp::utility::log_error()::{lambda(dpp::confirmation_callback_t const&)#1}>::_M_invoke(std::_Any_data const&, dpp::confirmation_callback_t const&) () from /usr/local/lib/libdpp.so.10.0.30
#17 0x00007f5edf3def2f in std::function<void (dpp::confirmation_callback_t const&)>::operator()(dpp::confirmation_callback_t const&) const ()
   from /usr/local/lib/libdpp.so.10.0.30
#18 0x00007f5edf3d95fb in dpp::cluster::interaction_response_create(dpp::snowflake, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, dpp::interaction_response const&, std::function<void (dpp::confirmation_callback_t const&)>)::{lambda(nlohmann::json_abi_v3_11_2::basic_json<std::map, std::vector, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, bool, long, unsigned long, double, std::allocator, nlohmann::json_abi_v3_11_2::adl_serializer, std::vector<unsigned char, std::allocator<unsigned char> > >&, dpp::http_request_completion_t const&)#1}::operator()(nlohmann::json_abi_v3_11_2::basic_json<std::map, std::vector, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, bool, long, unsigned long, double, std::allocator, nlohmann::json_abi_v3_11_2::adl_serializer, std::vector<unsigned char, std::allocator<unsigned char> > >&, dpp::http_request_completion_t const&) const ()
   from /usr/local/lib/libdpp.so.10.0.30
Jaskowicz1 commented 3 months ago

Fixed by #1126