jami-daemon issueshttps://git.jami.net/savoirfairelinux/jami-daemon/-/issues2021-07-28T16:05:38Zhttps://git.jami.net/savoirfairelinux/jami-daemon/-/issues/595Swarm 1:1 detect contact left2021-07-28T16:05:38ZSébastien BlinSwarm 1:1 detect contact left+ Change repo to include /invited
+ "Contact left" should be visible in getConversationMembers()
+ Add test
+ DO client changes+ Change repo to include /invited
+ "Contact left" should be visible in getConversationMembers()
+ Add test
+ DO client changesSwarm-chatSébastien BlinAndreas TraczykSébastien Blinhttps://git.jami.net/savoirfairelinux/jami-daemon/-/issues/592Swarm: move last read per participant daemon' side2021-07-28T17:15:46ZSébastien BlinSwarm: move last read per participant daemon' side+ getMembers() should return last read
+ react to messageDisplayed/setMessageDisplayed
+ Add test
+ Add method to compute how many messages between two interactions
+ Update LRC
+ Update doc+ getMembers() should return last read
+ react to messageDisplayed/setMessageDisplayed
+ Add test
+ Add method to compute how many messages between two interactions
+ Update LRC
+ Update docSwarm-chatSébastien BlinSébastien Blinhttps://git.jami.net/savoirfairelinux/jami-daemon/-/issues/591Swarm: Add syncing conversations2021-07-28T17:15:46ZSébastien BlinSwarm: Add syncing conversations+ convInfos_ works? => Test case replace convInfos_
+ Add to convInfo when accepting, not when cloned
+ getConversations() must return syncing conversations
+ conversationInfos() must return syncing:true
+ add tests
+ update doc
+ Add p...+ convInfos_ works? => Test case replace convInfos_
+ Add to convInfo when accepting, not when cloned
+ getConversations() must return syncing conversations
+ conversationInfos() must return syncing:true
+ add tests
+ update doc
+ Add patch for LRCSwarm-chatSébastien BlinSébastien Blinhttps://git.jami.net/savoirfairelinux/jami-daemon/-/issues/584Payment: create message exchange before placing call2024-02-14T14:07:00ZAline Gondim SantosPayment: create message exchange before placing callBacklogAline Gondim SantosAline Gondim Santoshttps://git.jami.net/savoirfairelinux/jami-daemon/-/issues/581UPNP - Read after free2023-02-06T20:57:10ZOlivier DionUPNP - Read after freeFound while using the agent
```
=================================================================
==585705==ERROR: AddressSanitizer: heap-use-after-free on address 0x615000080020 at pc 0x55555a141666 bp 0x7fffd8fad760 sp 0x7fffd8fad750
...Found while using the agent
```
=================================================================
==585705==ERROR: AddressSanitizer: heap-use-after-free on address 0x615000080020 at pc 0x55555a141666 bp 0x7fffd8fad760 sp 0x7fffd8fad750
READ of size 8 at 0x615000080020 thread T15
#0 0x55555a141665 in std::__shared_count<(__gnu_cxx::_Lock_policy)2>::__shared_count(std::__weak_count<(__gnu_cxx::_Lock_policy)2> const&) /usr/include/c++/11.1.0/bits/shared_ptr_base.h:867
#1 0x55555af06657 in std::__shared_ptr<jami::upnp::UPnPProtocol, (__gnu_cxx::_Lock_policy)2>::__shared_ptr<jami::upnp::UPnPProtocol, void>(std::__weak_ptr<jami::upnp::UPnPProtocol, (__gnu_cxx::_Lock_policy)2> const&) /usr/include/c++/11.1.0/bits/shared_ptr_base.h:1173
#2 0x55555af051fd in std::shared_ptr<jami::upnp::UPnPProtocol>::shared_ptr<jami::upnp::UPnPProtocol, void>(std::weak_ptr<jami::upnp::UPnPProtocol> const&) /usr/include/c++/11.1.0/bits/shared_ptr.h:326
#3 0x55555af04000 in std::enable_shared_from_this<jami::upnp::UPnPProtocol>::shared_from_this() /usr/include/c++/11.1.0/bits/shared_ptr.h:808
#4 0x55555af51dab in jami::upnp::PUPnP::weak() /ring-project/daemon/src/upnp/protocol/pupnp/pupnp.h:247
#5 0x55555af247d7 in jami::upnp::PUPnP::ctrlPtCallback(Upnp_EventType_e, void const*, void*) /ring-project/daemon/src/upnp/protocol/pupnp/pupnp.cpp:757
#6 0x7ffff6c417a6 (/usr/lib/libupnp.so.17+0xf7a6)
#7 0x7ffff6c3ec06 (/usr/lib/libupnp.so.17+0xcc06)
#8 0x7ffff4c41258 in start_thread (/usr/lib/libpthread.so.0+0x9258)
#9 0x7ffff38f25e2 in __GI___clone (/usr/lib/libc.so.6+0xfe5e2)
0x615000080020 is located 32 bytes inside of 456-byte region [0x615000080000,0x6150000801c8)
freed by thread T11 here:
#0 0x7ffff767ad69 in operator delete(void*, unsigned long) /build/gcc/src/gcc/libsanitizer/asan/asan_new_delete.cpp:172
#1 0x555559e4da57 in __gnu_cxx::new_allocator<std::_Sp_counted_ptr_inplace<jami::upnp::PUPnP, std::allocator<jami::upnp::PUPnP>, (__gnu_cxx::_Lock_policy)2> >::deallocate(std::_Sp_counted_ptr_inplace<jami::upnp::PUPnP, std::allocator<jami::upnp::PUPnP>, (__gnu_cxx::_Lock_policy)2>*, unsigned long) (/ring-project/daemon/test/agent/agent+0x48f9a57)
#2 0x555559e4c4ed in std::allocator_traits<std::allocator<std::_Sp_counted_ptr_inplace<jami::upnp::PUPnP, std::allocator<jami::upnp::PUPnP>, (__gnu_cxx::_Lock_policy)2> > >::deallocate(std::allocator<std::_Sp_counted_ptr_inplace<jami::upnp::PUPnP, std::allocator<jami::upnp::PUPnP>, (__gnu_cxx::_Lock_policy)2> >&, std::_Sp_counted_ptr_inplace<jami::upnp::PUPnP, std::allocator<jami::upnp::PUPnP>, (__gnu_cxx::_Lock_policy)2>*, unsigned long) /usr/include/c++/11.1.0/bits/alloc_traits.h:492
#3 0x555559e48d11 in std::__allocated_ptr<std::allocator<std::_Sp_counted_ptr_inplace<jami::upnp::PUPnP, std::allocator<jami::upnp::PUPnP>, (__gnu_cxx::_Lock_policy)2> > >::~__allocated_ptr() (/ring-project/daemon/test/agent/agent+0x48f4d11)
#4 0x555559e4ffee in std::_Sp_counted_ptr_inplace<jami::upnp::PUPnP, std::allocator<jami::upnp::PUPnP>, (__gnu_cxx::_Lock_policy)2>::_M_destroy() (/ring-project/daemon/test/agent/agent+0x48fbfee)
#5 0x555559d6ffc6 in std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>::_M_weak_release() /usr/include/c++/11.1.0/bits/shared_ptr_base.h:207
#6 0x555559d62b18 in std::__weak_count<(__gnu_cxx::_Lock_policy)2>::~__weak_count() /usr/include/c++/11.1.0/bits/shared_ptr_base.h:795
#7 0x55555af51bf9 in std::__weak_ptr<jami::upnp::PUPnP, (__gnu_cxx::_Lock_policy)2>::~__weak_ptr() /usr/include/c++/11.1.0/bits/shared_ptr_base.h:1605
#8 0x55555af51c67 in std::weak_ptr<jami::upnp::PUPnP>::~weak_ptr() /usr/include/c++/11.1.0/bits/shared_ptr.h:686
#9 0x55555af201d6 in ~<lambda> /ring-project/daemon/src/upnp/protocol/pupnp/pupnp.cpp:622
#10 0x55555af3abe5 in ~<lambda> /ring-project/daemon/src/upnp/protocol/pupnp/pupnp.h:144
#11 0x55555af4c6e4 in _M_destroy /usr/include/c++/11.1.0/bits/std_function.h:174
#12 0x55555af4717e in _M_manager /usr/include/c++/11.1.0/bits/std_function.h:200
#13 0x55555af42ae9 in _M_manager /usr/include/c++/11.1.0/bits/std_function.h:283
#14 0x555559aac0a6 in std::_Function_base::~_Function_base() /usr/include/c++/11.1.0/bits/std_function.h:245
#15 0x555559c82285 in std::function<void ()>::~function() /usr/include/c++/11.1.0/bits/std_function.h:328
#16 0x55555a94f2f4 in void std::_Destroy<std::function<void ()> >(std::function<void ()>*) /usr/include/c++/11.1.0/bits/stl_construct.h:140
#17 0x55555a94dc89 in void std::_Destroy_aux<false>::__destroy<std::function<void ()>*>(std::function<void ()>*, std::function<void ()>*) /usr/include/c++/11.1.0/bits/stl_construct.h:152
#18 0x55555a94b7da in void std::_Destroy<std::function<void ()>*>(std::function<void ()>*, std::function<void ()>*) /usr/include/c++/11.1.0/bits/stl_construct.h:185
#19 0x55555a947fbf in void std::_Destroy<std::function<void ()>*, std::function<void ()> >(std::function<void ()>*, std::function<void ()>*, std::allocator<std::function<void ()> >&) /usr/include/c++/11.1.0/bits/alloc_traits.h:746
#20 0x55555a94563c in std::vector<std::function<void ()>, std::allocator<std::function<void ()> > >::~vector() /usr/include/c++/11.1.0/bits/stl_vector.h:680
#21 0x55555a93c72a in jami::ScheduledExecutor::loop() /ring-project/daemon/src/scheduled_executor.cpp:142
#22 0x55555a938dcd in operator() /ring-project/daemon/src/scheduled_executor.cpp:32
#23 0x55555a94285f in __invoke_impl<void, jami::ScheduledExecutor::ScheduledExecutor()::<lambda()> > /usr/include/c++/11.1.0/bits/invoke.h:61
#24 0x55555a94271a in __invoke<jami::ScheduledExecutor::ScheduledExecutor()::<lambda()> > /usr/include/c++/11.1.0/bits/invoke.h:96
#25 0x55555a9425ef in _M_invoke<0> /usr/include/c++/11.1.0/bits/std_thread.h:253
#26 0x55555a942525 in operator() /usr/include/c++/11.1.0/bits/std_thread.h:260
#27 0x55555a9424dd in _M_run /usr/include/c++/11.1.0/bits/std_thread.h:211
#28 0x7ffff45643c3 in execute_native_thread_routine /build/gcc/src/gcc/libstdc++-v3/src/c++11/thread.cc:82
previously allocated by thread T1 here:
#0 0x7ffff7679ca1 in operator new(unsigned long) /build/gcc/src/gcc/libsanitizer/asan/asan_new_delete.cpp:99
#1 0x555559e4da17 in __gnu_cxx::new_allocator<std::_Sp_counted_ptr_inplace<jami::upnp::PUPnP, std::allocator<jami::upnp::PUPnP>, (__gnu_cxx::_Lock_policy)2> >::allocate(unsigned long, void const*) (/ring-project/daemon/test/agent/agent+0x48f9a17)
#2 0x555559e4c3ad in std::allocator_traits<std::allocator<std::_Sp_counted_ptr_inplace<jami::upnp::PUPnP, std::allocator<jami::upnp::PUPnP>, (__gnu_cxx::_Lock_policy)2> > >::allocate(std::allocator<std::_Sp_counted_ptr_inplace<jami::upnp::PUPnP, std::allocator<jami::upnp::PUPnP>, (__gnu_cxx::_Lock_policy)2> >&, unsigned long) /usr/include/c++/11.1.0/bits/alloc_traits.h:460
#3 0x555559e48b97 in std::__allocated_ptr<std::allocator<std::_Sp_counted_ptr_inplace<jami::upnp::PUPnP, std::allocator<jami::upnp::PUPnP>, (__gnu_cxx::_Lock_policy)2> > > std::__allocate_guarded<std::allocator<std::_Sp_counted_ptr_inplace<jami::upnp::PUPnP, std::allocator<jami::upnp::PUPnP>, (__gnu_cxx::_Lock_policy)2> > >(std::allocator<std::_Sp_counted_ptr_inplace<jami::upnp::PUPnP, std::allocator<jami::upnp::PUPnP>, (__gnu_cxx::_Lock_policy)2> >&) (/ring-project/daemon/test/agent/agent+0x48f4b97)
#4 0x555559e43e3a in std::__shared_count<(__gnu_cxx::_Lock_policy)2>::__shared_count<jami::upnp::PUPnP, std::allocator<jami::upnp::PUPnP>>(jami::upnp::PUPnP*&, std::_Sp_alloc_shared_tag<std::allocator<jami::upnp::PUPnP> >) /usr/include/c++/11.1.0/bits/shared_ptr_base.h:648
#5 0x555559e391ab in std::__shared_ptr<jami::upnp::PUPnP, (__gnu_cxx::_Lock_policy)2>::__shared_ptr<std::allocator<jami::upnp::PUPnP>>(std::_Sp_alloc_shared_tag<std::allocator<jami::upnp::PUPnP> >) /usr/include/c++/11.1.0/bits/shared_ptr_base.h:1337
#6 0x555559e2c43d in std::shared_ptr<jami::upnp::PUPnP>::shared_ptr<std::allocator<jami::upnp::PUPnP>>(std::_Sp_alloc_shared_tag<std::allocator<jami::upnp::PUPnP> >) (/ring-project/daemon/test/agent/agent+0x48d843d)
#7 0x555559e1f90c in std::shared_ptr<jami::upnp::PUPnP> std::allocate_shared<jami::upnp::PUPnP, std::allocator<jami::upnp::PUPnP>>(std::allocator<jami::upnp::PUPnP> const&) (/ring-project/daemon/test/agent/agent+0x48cb90c)
#8 0x555559e169a8 in std::shared_ptr<jami::upnp::PUPnP> std::make_shared<jami::upnp::PUPnP>() (/ring-project/daemon/test/agent/agent+0x48c29a8)
#9 0x555559dd7ee5 in jami::upnp::UPnPContext::init() /usr/include/c++/11.1.0/bits/upnp_context.cpp:118
#10 0x555559dd302e in operator() /usr/include/c++/11.1.0/bits/upnp_context.cpp:46
#11 0x555559dffdd1 in operator() /ring-project/daemon/src/upnp/upnp_thread_util.h:31
#12 0x555559e0b81e in __invoke_impl<void, jami::upnp::UpnpThreadUtil::runOnUpnpContextQueue<jami::upnp::UPnPContext::UPnPContext()::<lambda()> >(jami::upnp::UPnPContext::UPnPContext()::<lambda()>&&)::<lambda()>&> /usr/include/c++/11.1.0/bits/invoke.h:61
#13 0x555559e0827b in __invoke_r<void, jami::upnp::UpnpThreadUtil::runOnUpnpContextQueue<jami::upnp::UPnPContext::UPnPContext()::<lambda()> >(jami::upnp::UPnPContext::UPnPContext()::<lambda()>&&)::<lambda()>&> /usr/include/c++/11.1.0/bits/invoke.h:111
#14 0x555559e05f68 in _M_invoke /usr/include/c++/11.1.0/bits/std_function.h:291
#15 0x55555a02c996 in std::function<void ()>::operator()() const /usr/include/c++/11.1.0/bits/std_function.h:560
#16 0x55555a93c6c0 in jami::ScheduledExecutor::loop() /ring-project/daemon/src/scheduled_executor.cpp:137
#17 0x55555a938dcd in operator() /ring-project/daemon/src/scheduled_executor.cpp:32
#18 0x55555a94285f in __invoke_impl<void, jami::ScheduledExecutor::ScheduledExecutor()::<lambda()> > /usr/include/c++/11.1.0/bits/invoke.h:61
#19 0x55555a94271a in __invoke<jami::ScheduledExecutor::ScheduledExecutor()::<lambda()> > /usr/include/c++/11.1.0/bits/invoke.h:96
#20 0x55555a9425ef in _M_invoke<0> /usr/include/c++/11.1.0/bits/std_thread.h:253
#21 0x55555a942525 in operator() /usr/include/c++/11.1.0/bits/std_thread.h:260
#22 0x55555a9424dd in _M_run /usr/include/c++/11.1.0/bits/std_thread.h:211
#23 0x7ffff45643c3 in execute_native_thread_routine /build/gcc/src/gcc/libstdc++-v3/src/c++11/thread.cc:82
Thread T15 created by T11 here:
#0 0x7ffff7619fa7 in __interceptor_pthread_create /build/gcc/src/gcc/libsanitizer/asan/asan_interceptors.cpp:216
#1 0x7ffff6c3e520 (/usr/lib/libupnp.so.17+0xc520)
Thread T11 created by T1 here:
#0 0x7ffff7619fa7 in __interceptor_pthread_create /build/gcc/src/gcc/libsanitizer/asan/asan_interceptors.cpp:216
#1 0x7ffff45646aa in std::thread::_M_start_thread(std::unique_ptr<std::thread::_State, std::default_delete<std::thread::_State> >, void (*)()) /build/gcc/src/gcc-build/x86_64-pc-linux-gnu/libstdc++-v3/include/x86_64-pc-linux-gnu/bits/gthr-default.h:663
#2 0x55555a9394f8 in jami::ScheduledExecutor::ScheduledExecutor() /ring-project/daemon/src/scheduled_executor.cpp:27
#3 0x55555af0deae in jami::upnp::PUPnP::PUPnP() /ring-project/daemon/src/upnp/protocol/pupnp/pupnp.cpp:100
#4 0x555559e4dacc in void __gnu_cxx::new_allocator<jami::upnp::PUPnP>::construct<jami::upnp::PUPnP>(jami::upnp::PUPnP*) (/ring-project/daemon/test/agent/agent+0x48f9acc)
#5 0x555559e4c58e in void std::allocator_traits<std::allocator<jami::upnp::PUPnP> >::construct<jami::upnp::PUPnP>(std::allocator<jami::upnp::PUPnP>&, jami::upnp::PUPnP*) /usr/include/c++/11.1.0/bits/alloc_traits.h:512
#6 0x555559e4925e in std::_Sp_counted_ptr_inplace<jami::upnp::PUPnP, std::allocator<jami::upnp::PUPnP>, (__gnu_cxx::_Lock_policy)2>::_Sp_counted_ptr_inplace<>(std::allocator<jami::upnp::PUPnP>) (/ring-project/daemon/test/agent/agent+0x48f525e)
#7 0x555559e43ed7 in std::__shared_count<(__gnu_cxx::_Lock_policy)2>::__shared_count<jami::upnp::PUPnP, std::allocator<jami::upnp::PUPnP>>(jami::upnp::PUPnP*&, std::_Sp_alloc_shared_tag<std::allocator<jami::upnp::PUPnP> >) /usr/include/c++/11.1.0/bits/shared_ptr_base.h:650
#8 0x555559e391ab in std::__shared_ptr<jami::upnp::PUPnP, (__gnu_cxx::_Lock_policy)2>::__shared_ptr<std::allocator<jami::upnp::PUPnP>>(std::_Sp_alloc_shared_tag<std::allocator<jami::upnp::PUPnP> >) /usr/include/c++/11.1.0/bits/shared_ptr_base.h:1337
#9 0x555559e2c43d in std::shared_ptr<jami::upnp::PUPnP>::shared_ptr<std::allocator<jami::upnp::PUPnP>>(std::_Sp_alloc_shared_tag<std::allocator<jami::upnp::PUPnP> >) (/ring-project/daemon/test/agent/agent+0x48d843d)
#10 0x555559e1f90c in std::shared_ptr<jami::upnp::PUPnP> std::allocate_shared<jami::upnp::PUPnP, std::allocator<jami::upnp::PUPnP>>(std::allocator<jami::upnp::PUPnP> const&) (/ring-project/daemon/test/agent/agent+0x48cb90c)
#11 0x555559e169a8 in std::shared_ptr<jami::upnp::PUPnP> std::make_shared<jami::upnp::PUPnP>() (/ring-project/daemon/test/agent/agent+0x48c29a8)
#12 0x555559dd7ee5 in jami::upnp::UPnPContext::init() /usr/include/c++/11.1.0/bits/upnp_context.cpp:118
#13 0x555559dd302e in operator() /usr/include/c++/11.1.0/bits/upnp_context.cpp:46
#14 0x555559dffdd1 in operator() /ring-project/daemon/src/upnp/upnp_thread_util.h:31
#15 0x555559e0b81e in __invoke_impl<void, jami::upnp::UpnpThreadUtil::runOnUpnpContextQueue<jami::upnp::UPnPContext::UPnPContext()::<lambda()> >(jami::upnp::UPnPContext::UPnPContext()::<lambda()>&&)::<lambda()>&> /usr/include/c++/11.1.0/bits/invoke.h:61
#16 0x555559e0827b in __invoke_r<void, jami::upnp::UpnpThreadUtil::runOnUpnpContextQueue<jami::upnp::UPnPContext::UPnPContext()::<lambda()> >(jami::upnp::UPnPContext::UPnPContext()::<lambda()>&&)::<lambda()>&> /usr/include/c++/11.1.0/bits/invoke.h:111
#17 0x555559e05f68 in _M_invoke /usr/include/c++/11.1.0/bits/std_function.h:291
#18 0x55555a02c996 in std::function<void ()>::operator()() const /usr/include/c++/11.1.0/bits/std_function.h:560
#19 0x55555a93c6c0 in jami::ScheduledExecutor::loop() /ring-project/daemon/src/scheduled_executor.cpp:137
#20 0x55555a938dcd in operator() /ring-project/daemon/src/scheduled_executor.cpp:32
#21 0x55555a94285f in __invoke_impl<void, jami::ScheduledExecutor::ScheduledExecutor()::<lambda()> > /usr/include/c++/11.1.0/bits/invoke.h:61
#22 0x55555a94271a in __invoke<jami::ScheduledExecutor::ScheduledExecutor()::<lambda()> > /usr/include/c++/11.1.0/bits/invoke.h:96
#23 0x55555a9425ef in _M_invoke<0> /usr/include/c++/11.1.0/bits/std_thread.h:253
#24 0x55555a942525 in operator() /usr/include/c++/11.1.0/bits/std_thread.h:260
#25 0x55555a9424dd in _M_run /usr/include/c++/11.1.0/bits/std_thread.h:211
#26 0x7ffff45643c3 in execute_native_thread_routine /build/gcc/src/gcc/libstdc++-v3/src/c++11/thread.cc:82
Thread T1 created by T0 here:
#0 0x7ffff7619fa7 in __interceptor_pthread_create /build/gcc/src/gcc/libsanitizer/asan/asan_interceptors.cpp:216
#1 0x7ffff45646aa in std::thread::_M_start_thread(std::unique_ptr<std::thread::_State, std::default_delete<std::thread::_State> >, void (*)()) /build/gcc/src/gcc-build/x86_64-pc-linux-gnu/libstdc++-v3/include/x86_64-pc-linux-gnu/bits/gthr-default.h:663
#2 0x55555a9394f8 in jami::ScheduledExecutor::ScheduledExecutor() /ring-project/daemon/src/scheduled_executor.cpp:27
#3 0x55555a5f3ab2 in jami::Manager::ManagerPimpl::ManagerPimpl(jami::Manager&) /ring-project/daemon/src/manager.cpp:459
#4 0x55555a5fc60e in jami::Manager::Manager() /ring-project/daemon/src/manager.cpp:737
#5 0x55555a5fbfcb in jami::Manager::instance() /ring-project/daemon/src/manager.cpp:713
#6 0x555559c7a228 in DRing::init(DRing::InitFlag) /ring-project/daemon/src/ring_api.cpp:57
#7 0x555559b24d07 in main /usr/include/c++/11.1.0/main.cpp:326
#8 0x7ffff381bb24 in __libc_start_main (/usr/lib/libc.so.6+0x27b24)
SUMMARY: AddressSanitizer: heap-use-after-free /usr/include/c++/11.1.0/bits/shared_ptr_base.h:867 in std::__shared_count<(__gnu_cxx::_Lock_policy)2>::__shared_count(std::__weak_count<(__gnu_cxx::_Lock_policy)2> const&)
Shadow bytes around the buggy address:
0x0c2a80007fb0: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
0x0c2a80007fc0: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
0x0c2a80007fd0: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
0x0c2a80007fe0: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
0x0c2a80007ff0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
=>0x0c2a80008000: fd fd fd fd[fd]fd fd fd fd fd fd fd fd fd fd fd
0x0c2a80008010: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
0x0c2a80008020: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
0x0c2a80008030: fd fd fd fd fd fd fd fd fd fa fa fa fa fa fa fa
0x0c2a80008040: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x0c2a80008050: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
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
==585705==ABORTING
```BacklogMohamed ChibaniMohamed Chibanihttps://git.jami.net/savoirfairelinux/jami-daemon/-/issues/573conference: no rdv and videomuted host should appear2021-11-18T16:19:15ZAline Gondim Santosconference: no rdv and videomuted host should appearBackloghttps://git.jami.net/savoirfairelinux/jami-daemon/-/issues/563Huge battery drain when using Jami [blocked by pupnp upstream]2023-09-29T09:44:30ZAndy HiscockHuge battery drain when using Jami [blocked by pupnp upstream]I'm losing about 2% battery a minute on my iPhone 5s. Can this be improved?I'm losing about 2% battery a minute on my iPhone 5s. Can this be improved?BacklogKateryna KostiukKateryna Kostiukhttps://git.jami.net/savoirfairelinux/jami-daemon/-/issues/561Jami/Daemon version - unify versioning across platforms2024-01-09T19:32:04ZMohamed ChibaniJami/Daemon version - unify versioning across platformsThe production version is used for informational purposes, and also as a SIP User-Agent identifier which will be relied on to know the peer Daemon version.\
The generated product version format must be uniform across all platforms.\
\
**...The production version is used for informational purposes, and also as a SIP User-Agent identifier which will be relied on to know the peer Daemon version.\
The generated product version format must be uniform across all platforms.\
\
**Expected format**
For official releases: Jami Daemon Major.Minor.Patch (platform). Example "Jami Deamon 10.0.1 (linux)"\
Others: Jami Daemon Major.Minor.Patch-commitID (example "Jami Deamon 10.0.1-cae2ba1653 (linux)"\
\
This format is not respected across all platforms (at least on Windows)BacklogMohamed ChibaniMohamed Chibanihttps://git.jami.net/savoirfairelinux/jami-daemon/-/issues/558daemon: add tests for conferences2021-07-09T20:22:44ZSébastien Blindaemon: add tests for conferencesTo start to test layouts, mute, etcTo start to test layouts, mute, etcBackloghttps://git.jami.net/savoirfairelinux/jami-daemon/-/issues/557Fuzzing SIP over TLS2023-12-27T18:02:51ZSébastien BlinFuzzing SIP over TLS# Fuzzing SIP over TLS
Currently, I've made a lexer for SIP communication that allows one to construct an object and to manipulate a SIP message.
### Scenarios
#### Shuffle randomly the SIP message
This results in the call been hang ...# Fuzzing SIP over TLS
Currently, I've made a lexer for SIP communication that allows one to construct an object and to manipulate a SIP message.
### Scenarios
#### Shuffle randomly the SIP message
This results in the call been hang after some delay. We probably want to generate random fields instead.
#### Keep changing the SIP version
Version is changed randomly between SIP/1.0 and SIP/2.0.
#### TODO - Change the status code
### Bad SDP body
If the body content of a SDP request is invalid, an assertion failed. The null pointer seems to not be a problem because it's checked, however the caller should probably not call the function in the first place. Will investigate further.
In sdp.cpp:
```c++
583 assert(remoteSession_);
```
```
#0 0x00007ffff39fdd22 in raise () at /usr/lib/libc.so.6
#1 0x00007ffff39e7862 in abort () at /usr/lib/libc.so.6
#2 0x00007ffff39e7747 in _nl_load_domain.cold () at /usr/lib/libc.so.6
#3 0x00007ffff39f6616 in () at /usr/lib/libc.so.6
#4 0x000055555a84fa0e in jami::Sdp::processIncomingOffer(std::vector<jami::MediaAttribute, std::allocator<jami::MediaAttribute> > const&) (this=0x6110015f0080, mediaList=std::vector of length 1, capacity 1 = {...}) at sdp.cpp:583
#5 0x0000555559bc894e in jami::transaction_request_cb(pjsip_rx_data*) (rdata=0x625007721b08) at sipvoiplink.cpp:451
#6 0x000055555aeaf623 in pjsip_endpt_process_rx_data ()
#7 0x000055555aeaf856 in endpt_on_rx_msg ()
#8 0x000055555aeb685e in pjsip_tpmgr_receive_packet ()
#9 0x000055555a079ce0 in jami::tls::ChanneledSIPTransport::handleEvents() (this=0x625007721900) at /usr/include/c++/11.1.0/bits/channeled_transport.cpp:237
#10 0x000055555a070967 in operator()() const (__closure=0x603002aed2b0) at /usr/include/c++/11.1.0/bits/channeled_transport.cpp:150
#11 0x000055555a0809bd in std::__invoke_impl<void, jami::tls::ChanneledSIPTransport::ChanneledSIPTransport(pjsip_endpoint*, int, const std::shared_ptr<jami::ChannelSocket>&, const jami::IpAddr&, const jami::IpAddr&, jami::onShutdownCb&&)::<lambda(const uint8_t*, size_t)>::<lambda()>&>(std::__invoke_other, struct {...} &) (__f=...) at /usr/include/c++/11.1.0/bits/invoke.h:61
#12 0x000055555a07ea22 in std::__invoke_r<void, jami::tls::ChanneledSIPTransport::ChanneledSIPTransport(pjsip_endpoint*, int, const std::shared_ptr<jami::ChannelSocket>&, const jami::IpAddr&, const jami::IpAddr&, jami::onShutdownCb&&)::<lambda(const uint8_t*, size_t)>::<lambda()>&>(struct {...} &) (__fn=...) at /usr/include/c++/11.1.0/bits/invoke.h:111
#13 0x000055555a07d701 in std::_Function_handler<void(), jami::tls::ChanneledSIPTransport::ChanneledSIPTransport(pjsip_endpoint*, int, const std::shared_ptr<jami::ChannelSocket>&, const jami::IpAddr&, const jami::IpAddr&, jami::onShutdownCb&&)::<lambda(const uint8_t*, size_t)>::<lambda()> >::_M_invoke(const std::_Any_data &) (__functor=...) at /usr/include/c++/11.1.0/bits/std_function.h:291
#14 0x00005555596e546d in std::function<void ()>::operator()() const (this=0x603002aed2b0) at /usr/include/c++/11.1.0/bits/std_function.h:560
#15 0x0000555559a89730 in jami::ScheduledExecutor::loop() (this=0x625007723e10) at scheduled_executor.cpp:137
#16 0x0000555559a85e1e in operator()() const (__closure=0x603000073a88) at scheduled_executor.cpp:32
#17 0x0000555559a8f8be in std::__invoke_impl<void, jami::ScheduledExecutor::ScheduledExecutor()::<lambda()> >(std::__invoke_other, struct {...} &&) (__f=...) at /usr/include/c++/11.1.0/bits/invoke.h:61
#18 0x0000555559a8f779 in std::__invoke<jami::ScheduledExecutor::ScheduledExecutor()::<lambda()> >(struct {...} &&) (__fn=...) at /usr/include/c++/11.1.0/bits/invoke.h:96
#19 0x0000555559a8f64e in std::thread::_Invoker<std::tuple<jami::ScheduledExecutor::ScheduledExecutor()::<lambda()> > >::_M_invoke<0>(std::_Index_tuple<0>) (this=0x603000073a88) at /usr/include/c++/11.1.0/bits/std_thread.h:253
#20 0x0000555559a8f584 in std::thread::_Invoker<std::tuple<jami::ScheduledExecutor::ScheduledExecutor()::<lambda()> > >::operator()(void) (this=0x603000073a88) at /usr/include/c++/11.1.0/bits/std_thread.h:260
#21 0x0000555559a8f53c in std::thread::_State_impl<std::thread::_Invoker<std::tuple<jami::ScheduledExecutor::ScheduledExecutor()::<lambda()> > > >::_M_run(void) (this=0x603000073a80) at /usr/include/c++/11.1.0/bits/std_thread.h:211
#22 0x00007ffff47333c4 in std::execute_native_thread_routine(void*) (__p=0x603000073a80) at /build/gcc/src/gcc/libstdc++-v3/src/c++11/thread.cc:82
#23 0x00007ffff667a259 in start_thread () at /usr/lib/libpthread.so.0
#24 0x00007ffff3abf5e3 in clone () at /usr/lib/libc.so.6
```
#### Payload attack (SDP Huge value of Content-Length)
Alice duplicates the body of its SDP request N times. N grows at a rate of 2^M.
After some threshold, connection between peer can not be establish if iniated from Alice. Bob can still call Alice.
### Payload attack (SIP MESSAGE)
Alice spam bob with very huge message text.
The TLS connections seems to stop working and Bob receive the message text (short version) over the DHt instead.
### Sending none supported content-type (text/html, text/javascript, etc.)
The content-type is simply ignored. Call can be made.
#### TODO - Sending SIP request over none SIP channel (can be applied to other protocols as well)BacklogOlivier DionOlivier Dionhttps://git.jami.net/savoirfairelinux/jami-daemon/-/issues/540Analyze opened files2021-12-29T17:16:32ZSébastien BlinAnalyze opened filesWe need to check how many opened files and what files are opened
+ per account
+ per calls
+ per calls with 10 participants
+ per calls with 20 participants
+ per calls with 30 participants
+ per calls with 40 participantsWe need to check how many opened files and what files are opened
+ per account
+ per calls
+ per calls with 10 participants
+ per calls with 20 participants
+ per calls with 30 participants
+ per calls with 40 participantsBackloghttps://git.jami.net/savoirfairelinux/jami-daemon/-/issues/537Conference layout seems broken after 25+ participants2021-12-21T21:11:59ZSébastien BlinConference layout seems broken after 25+ participants# Scenario
+ Start a conference with 25 participants
+ Another participant join
# Expected
+ The layout should be updated
# Current result
Seems blocked to the previous view# Scenario
+ Start a conference with 25 participants
+ Another participant join
# Expected
+ The layout should be updated
# Current result
Seems blocked to the previous viewBackloghttps://git.jami.net/savoirfairelinux/jami-daemon/-/issues/530Medias: Big lag when a lot of person leave the conference2021-12-23T21:46:55ZSébastien BlinMedias: Big lag when a lot of person leave the conference# Scenario
+ Be in a rdv with 10 people
+ Every body leave except 2 people
# Current result
+ Big lag on video
# Expected
+ No lag# Scenario
+ Be in a rdv with 10 people
+ Every body leave except 2 people
# Current result
+ Big lag on video
# Expected
+ No lagBackloghttps://git.jami.net/savoirfairelinux/jami-daemon/-/issues/529SIP: refactor SIPCall and related classes and routines2023-09-29T10:00:20ZMohamed ChibaniSIP: refactor SIPCall and related classes and routinesThe goal of the refactor is to improve stability (prevent crashes and deadlocks), clarify interactions between SIPCall class with other classes/routines. Three main changes will be introduced in this activity:
**1- Add an interface to r...The goal of the refactor is to improve stability (prevent crashes and deadlocks), clarify interactions between SIPCall class with other classes/routines. Three main changes will be introduced in this activity:
**1- Add an interface to report PJSIP events**\
The use of this interface is to give limited access to SIPCall from SipVoipLink class and related routines.
All processing involving SIPCall properties (such as SDP and RTP sessions) should be done as much as possible within SIPCall class to enhance encapsulation.
**2- Use the same thread (SIP thread) for SipVoIPLink events hander and SIP Transport**\
All events (hopefully) reported by PSIP lib will be reported on the same thread, which will help reduce data race on SIPCall class in particular.
**3- Run most of the task involving SIPCall on the same thread**
Dispatch tasks (when possible) on the SIP thread. Note that some calls still need to access SIPCall synchronously (getters in particular).BacklogMohamed ChibaniMohamed Chibanihttps://git.jami.net/savoirfairelinux/jami-daemon/-/issues/524Swarm: redo file transfer logic [Wait for android implem]2022-11-18T20:22:36ZSébastien BlinSwarm: redo file transfer logic [Wait for android implem]+ sendFile() only adds a message to the conversation, but don't send any request
+ other peers download files or not
+ logic is the same as askForTransfer
+ URI should supports parameters like from/to to download a block
+ If a socket ...+ sendFile() only adds a message to the conversation, but don't send any request
+ other peers download files or not
+ logic is the same as askForTransfer
+ URI should supports parameters like from/to to download a block
+ If a socket is cut, it should retry to download
+ Add ratio infos (peers transfer in progress)
# TODO
~~+ rebase unit tests~~
~~+ Download file return TID file~~
~~+ relink cancelTransfer~~
~~+ shutdown channel avoid write both sides.~~
~~+ start offset support~~
~~+ remove istringstream~~
~~+ cache waiting transfers~~
~~+ add re-ask mechanism~~
~~+ Prepare patch to delete all deprecated code~~
~~+ Relink infos()~~
~~+ Check that all test builds~~
~~+ Move transferManager in conversation and logic from jamiaccount~~
~~+ rebase re-ask~~
~~+ sendProfile()~~
~~+ patch to remove all old logic~~
~~+ fileInfo (conv, interactionId, info)~~
~~+ cleanup code~~
~~+ add tests (info out/in ; retry ; info ; bytesProgress)~~
~~+ Update API~~Swarm-chatSébastien BlinSébastien Blinhttps://git.jami.net/savoirfairelinux/jami-daemon/-/issues/517Remove hacky underlyingIce()2021-12-29T18:52:33ZSébastien BlinRemove hacky underlyingIce()underlyingIce() is hacky. This method should not exists and the chain should be clean.
However this issue is quite complex, because the socket can be cut pretty everywhere in the chain and it should correctly close all the layer.
The m...underlyingIce() is hacky. This method should not exists and the chain should be clean.
However this issue is quite complex, because the socket can be cut pretty everywhere in the chain and it should correctly close all the layer.
The most hacky part is in TlsSocketEndpoint::ImplBackloghttps://git.jami.net/savoirfairelinux/jami-daemon/-/issues/506plugins: set handlers activation order2021-04-01T12:53:01ZAline Gondim Santosplugins: set handlers activation orderUser should be able to change the order each handler is called from the observable notify.User should be able to change the order each handler is called from the observable notify.BacklogAline Gondim SantosAline Gondim Santoshttps://git.jami.net/savoirfairelinux/jami-daemon/-/issues/501UPNP-NATPMP - Add a unit test with minimal validation2021-12-29T18:57:47ZMohamed ChibaniUPNP-NATPMP - Add a unit test with minimal validationBackloghttps://git.jami.net/savoirfairelinux/jami-daemon/-/issues/494Recheck all APIs2021-12-29T19:03:54ZSébastien BlinRecheck all APIs+ Remove unnecessary APIs
+ Homogeneize file naming
+ definitions URI/ids
+ Split ConfigurationManager+ Remove unnecessary APIs
+ Homogeneize file naming
+ definitions URI/ids
+ Split ConfigurationManagerBackloghttps://git.jami.net/savoirfairelinux/jami-daemon/-/issues/485Rework of the file streaming feature2023-11-09T20:43:58ZPierre LespagnolRework of the file streaming featureUse the media player to stream filesUse the media player to stream filesBacklogAline Gondim SantosAline Gondim Santos