From bdb3dedf2c91796b540955f6815390c6ba1d576a Mon Sep 17 00:00:00 2001 From: Nicolas Pope <nwpope@utu.fi> Date: Wed, 22 Jul 2020 16:33:39 +0300 Subject: [PATCH] Fix for corrupt pointer in packet receiver --- components/net/cpp/src/dispatcher.cpp | 2 +- components/streams/src/stream.cpp | 9 +++++++-- components/structures/src/new_frame.cpp | 7 +++++++ 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/components/net/cpp/src/dispatcher.cpp b/components/net/cpp/src/dispatcher.cpp index b1a5b265e..997ca1238 100644 --- a/components/net/cpp/src/dispatcher.cpp +++ b/components/net/cpp/src/dispatcher.cpp @@ -101,7 +101,7 @@ void ftl::net::Dispatcher::dispatch_call(Peer &s, const msgpack::object &msg) { optional<Dispatcher::adaptor_type> ftl::net::Dispatcher::_locateHandler(const std::string &name) const { auto it_func = funcs_.find(name); - if (it_func == end(funcs_)) { + if (it_func == funcs_.end()) { if (parent_ != nullptr) { return parent_->_locateHandler(name); } else { diff --git a/components/streams/src/stream.cpp b/components/streams/src/stream.cpp index 782ec1fb3..b97667d2b 100644 --- a/components/streams/src/stream.cpp +++ b/components/streams/src/stream.cpp @@ -86,12 +86,17 @@ void Muxer::add(Stream *s, size_t fsid) { auto &se = streams_.emplace_back(); int i = streams_.size()-1; se.stream = s; - ftl::stream::Muxer::StreamEntry *ptr = &se; - handles_.push_back(std::move(s->onPacket([this,s,i,fsid,ptr](const ftl::codecs::StreamPacket &spkt, const ftl::codecs::Packet &pkt) { + handles_.push_back(std::move(s->onPacket([this,s,i,fsid](const ftl::codecs::StreamPacket &spkt, const ftl::codecs::Packet &pkt) { //TODO: Allow input streams to have other streamIDs // Same fsid means same streamIDs map together in the end + ftl::stream::Muxer::StreamEntry *ptr = nullptr; + { + SHARED_LOCK(mutex_,lk); + ptr = &streams_[i]; + } + ftl::codecs::StreamPacket spkt2 = spkt; ptr->original_fsid = spkt.streamID; spkt2.streamID = fsid; diff --git a/components/structures/src/new_frame.cpp b/components/structures/src/new_frame.cpp index a290b25e5..ba79f32bf 100644 --- a/components/structures/src/new_frame.cpp +++ b/components/structures/src/new_frame.cpp @@ -427,6 +427,13 @@ std::unordered_set<ftl::codecs::Channel> Frame::allChannels() const { res.emplace(k); } } + + uint64_t m = 1; + // TODO: NAIVE, use ffs or ctz. + for (int i=0; i<32; ++i) { + if (m & available_) res.emplace(static_cast<Channel>(i)); + m <<= 1; + } return res; } -- GitLab