From be86cbbe4eff931db0e59ce14fdba19365c075f7 Mon Sep 17 00:00:00 2001 From: Antoine C Date: Tue, 8 Oct 2024 22:33:38 +0100 Subject: [PATCH] fix: prevent null CO access when cloning sampler or preview --- src/engine/channels/enginechannel.h | 2 +- src/engine/channels/enginedeck.cpp | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/engine/channels/enginechannel.h b/src/engine/channels/enginechannel.h index ef29eca9e0c..6598059c352 100644 --- a/src/engine/channels/enginechannel.h +++ b/src/engine/channels/enginechannel.h @@ -53,7 +53,7 @@ class EngineChannel : public EngineObject { void setTalkover(bool enabled); virtual bool isTalkoverEnabled() const; inline bool isTalkoverChannel() { return m_bIsTalkoverChannel; }; - inline bool isPrimaryDeck() { + inline bool isPrimaryDeck() const { return m_bIsPrimaryDeck; }; int getChannelIndex() { diff --git a/src/engine/channels/enginedeck.cpp b/src/engine/channels/enginedeck.cpp index 25e02a674c7..a5a6f0cd277 100644 --- a/src/engine/channels/enginedeck.cpp +++ b/src/engine/channels/enginedeck.cpp @@ -10,6 +10,7 @@ #include "engine/enginevumeter.h" #include "moc_enginedeck.cpp" #include "track/track.h" +#include "util/assert.h" #include "util/sample.h" #ifdef __STEM__ @@ -206,6 +207,16 @@ void EngineDeck::cloneStemState(const EngineDeck* deckToClone) { VERIFY_OR_DEBUG_ASSERT(deckToClone) { return; } + // Sampler and preview decks don't have stem controls + if (!isPrimaryDeck() || !deckToClone->isPrimaryDeck()) { + return; + } + VERIFY_OR_DEBUG_ASSERT(m_stemGain.size() == kMaxSupportedStems && + m_stemMute.size() == kMaxSupportedStems && + deckToClone->m_stemGain.size() == kMaxSupportedStems && + deckToClone->m_stemMute.size() == kMaxSupportedStems) { + return; + } for (int stemIdx = 0; stemIdx < kMaxSupportedStems; stemIdx++) { m_stemGain[stemIdx]->set(deckToClone->m_stemGain[stemIdx]->get()); m_stemMute[stemIdx]->set(deckToClone->m_stemMute[stemIdx]->get());