Boost logo

Boost Users :

From: æ³°å¿— (tjisana.lewis_at_[hidden])
Date: 2022-02-11 16:19:02


I was thinking of revisiting cpp_dec_float for that reason too - thanks for
noting that. Here's the result with address sanitizer ...

=================================================================
==15679==ERROR: AddressSanitizer: heap-use-after-free on address
0x60600000ea48 at pc 0x0000004228c3 bp 0x7f2e041f16a0 sp 0x7f2e041f1698
READ of size 40 at 0x60600000ea48 thread T0
    #0 0x4228c2 in boost::multiprecision::backends::cpp_dec_float<50u, int,
void>::cpp_dec_float(boost::multiprecision::backends::cpp_dec_float<50u,
int, void> const&) /usr/include/boost/multiprecision/cpp_dec_float.hpp:210
    #1 0x427592 in
boost::multiprecision::number<boost::multiprecision::backends::cpp_dec_float<50u,
int, void>,
(boost::multiprecision::expression_template_option)1>::number(boost::multiprecision::number<boost::multiprecision::backends::cpp_dec_float<50u,
int, void>, (boost::multiprecision::expression_template_option)1> const&)
/usr/include/boost/multiprecision/number.hpp:47
    #2 0x4168ae in
transform<__gnu_cxx::__normal_iterator<boost::multiprecision::number<boost::multiprecision::backends::cpp_dec_float<50>
>*,
std::vector<boost::multiprecision::number<boost::multiprecision::backends::cpp_dec_float<50>
> > >,
std::back_insert_iterator<std::vector<boost::multiprecision::number<boost::multiprecision::backends::cpp_dec_float<50>
> > >, higher_high::calculate(const positions_map&, const
last_tick&)::<lambda(boost::multiprecision::cpp_dec_float_50)> >
/usr/include/c++/11/bits/stl_algo.h:4296
    #3 0x410ca3 in
higher_high::calculate(std::unordered_map<std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> >, trade_position,
std::hash<std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > >, std::equal_to<std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > >,
std::allocator<std::pair<std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const, trade_position> > >
const&, last_tick const&) ../src/higher_high.cpp:197
    #4 0x4aca5d in operator() ../src/ib_trading_engine.cpp:228
    #5 0x4c11d1 in operator()
/usr/include/boost/coroutine2/detail/push_control_block_cc.ipp:90
    #6 0x4c27e5 in __invoke_impl<boost::context::fiber,
boost::coroutines2::detail::push_coroutine<last_tick>::control_block::control_block<boost::context::basic_fixedsize_stack<boost::context::stack_traits>,
ib_trading_engine::run()::<lambda(boost::coroutines2::coroutine<last_tick>::pull_type&)>
>(boost::context::preallocated,
boost::context::basic_fixedsize_stack<boost::context::stack_traits>&&,
ib_trading_engine::run()::<lambda(boost::coroutines2::coroutine<last_tick>::pull_type&)>&&)::<lambda(boost::context::fiber&&)>&,
boost::context::fiber> /usr/include/c++/11/bits/invoke.h:61
    #7 0x4c25d0 in
__invoke<boost::coroutines2::detail::push_coroutine<last_tick>::control_block::control_block<boost::context::basic_fixedsize_stack<boost::context::stack_traits>,
ib_trading_engine::run()::<lambda(boost::coroutines2::coroutine<last_tick>::pull_type&)>
>(boost::context::preallocated,
boost::context::basic_fixedsize_stack<boost::context::stack_traits>&&,
ib_trading_engine::run()::<lambda(boost::coroutines2::coroutine<last_tick>::pull_type&)>&&)::<lambda(boost::context::fiber&&)>&,
boost::context::fiber> /usr/include/c++/11/bits/invoke.h:97
    #8 0x4c2537 in
invoke<boost::coroutines2::detail::push_coroutine<last_tick>::control_block::control_block<boost::context::basic_fixedsize_stack<boost::context::stack_traits>,
ib_trading_engine::run()::<lambda(boost::coroutines2::coroutine<last_tick>::pull_type&)>
>(boost::context::preallocated,
boost::context::basic_fixedsize_stack<boost::context::stack_traits>&&,
ib_trading_engine::run()::<lambda(boost::coroutines2::coroutine<last_tick>::pull_type&)>&&)::<lambda(boost::context::fiber&&)>&,
boost::context::fiber> /usr/include/c++/11/functional:98
    #9 0x4c2297 in run /usr/include/boost/context/fiber_fcontext.hpp:140
    #10 0x4c2043 in
fiber_entry<boost::context::detail::fiber_record<boost::context::fiber,
boost::context::basic_fixedsize_stack<boost::context::stack_traits>,
boost::coroutines2::detail::push_coroutine<last_tick>::control_block::control_block<boost::context::basic_fixedsize_stack<boost::context::stack_traits>,
ib_trading_engine::run()::<lambda(boost::coroutines2::coroutine<last_tick>::pull_type&)>
>(boost::context::preallocated,
boost::context::basic_fixedsize_stack<boost::context::stack_traits>&&,
ib_trading_engine::run()::<lambda(boost::coroutines2::coroutine<last_tick>::pull_type&)>&&)::<lambda(boost::context::fiber&&)>
> > /usr/include/boost/context/fiber_fcontext.hpp:80
    #11 0x7f2e0740118e in make_fcontext
(/lib64/libboost_context.so.1.78.0+0x118e)

0x60600000ea58 is located 0 bytes to the right of 56-byte region
[0x60600000ea20,0x60600000ea58)
freed by thread T0 here:
    #0 0x7f2e074b8dc7 in operator delete(void*, unsigned long)
(/lib64/libasan.so.6+0xb3dc7)

previously allocated by thread T0 here:
    #0 0x7f2e074b7f47 in operator new(unsigned long)
(/lib64/libasan.so.6+0xb2f47)

SUMMARY: AddressSanitizer: heap-use-after-free
/usr/include/boost/multiprecision/cpp_dec_float.hpp:210 in
boost::multiprecision::backends::cpp_dec_float<50u, int,
void>::cpp_dec_float(boost::multiprecision::backends::cpp_dec_float<50u,
int, void> const&)
Shadow bytes around the buggy address:
  0x0c0c7fff9cf0: fd fd fd fd fd fd fd fa fa fa fa fa fd fd fd fd
  0x0c0c7fff9d00: fd fd fd fa fa fa fa fa fd fd fd fd fd fd fd fa
  0x0c0c7fff9d10: fa fa fa fa fd fd fd fd fd fd fd fa fa fa fa fa
  0x0c0c7fff9d20: fd fd fd fd fd fd fd fa fa fa fa fa fd fd fd fd
  0x0c0c7fff9d30: fd fd fd fa fa fa fa fa fd fd fd fd fd fd fd fa
=>0x0c0c7fff9d40: fa fa fa fa fd fd fd fd fd[fd]fd fa fa fa fa fa
  0x0c0c7fff9d50: 00 00 00 00 00 00 00 fa fa fa fa fa fa fa fa fa
  0x0c0c7fff9d60: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c0c7fff9d70: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c0c7fff9d80: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c0c7fff9d90: 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
  Shadow gap: cc
==15679==ABORTING

On Fri, Feb 11, 2022 at 2:06 AM John Maddock via Boost-users <
boost-users_at_[hidden]> wrote:

> On 10/02/2022 22:07, tjisana (æ³°å¿—) via Boost-users wrote:
> > Okay, rebuild the binary with AddressSanitizer. Since I need to run
> > the program during market hours, I'll do so first thing tomorrow -
> > will let you know how it goes.
>
> Given that the fault is intermittent, and the offending line in the
> backtrace is innocuous, I would hazard a guess at stack overflow.
>
> BTW, just to say, cpp_dec_float does not do correct bankers rounding,
> and so may not be a good choice for critical financial programs.
>
> Best, John.
>
>
> --
> This email has been checked for viruses by Avast antivirus software.
> https://www.avast.com/antivirus
>
> _______________________________________________
> Boost-users mailing list
> Boost-users_at_[hidden]
> https://lists.boost.org/mailman/listinfo.cgi/boost-users
>



Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net