From e42ab22a7855705e9bbb879b3d2cee73a156e063 Mon Sep 17 00:00:00 2001 From: reuk Date: Tue, 6 May 2025 13:32:48 +0100 Subject: [PATCH] VST3 Client: Add null checks, in case Edit Controller is used before being connected --- .../juce_audio_plugin_client_VST3.cpp | 20 +++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/modules/juce_audio_plugin_client/juce_audio_plugin_client_VST3.cpp b/modules/juce_audio_plugin_client/juce_audio_plugin_client_VST3.cpp index c095690e10..5c14c82600 100644 --- a/modules/juce_audio_plugin_client/juce_audio_plugin_client_VST3.cpp +++ b/modules/juce_audio_plugin_client/juce_audio_plugin_client_VST3.cpp @@ -1140,6 +1140,12 @@ public: Vst::ParamID oldParamID, Vst::ParamID& newParamID) override { + if (audioProcessor == nullptr) + { + jassertfalse; + return kResultFalse; + } + const auto parameterMap = audioProcessor->getParameterMap (toVST3InterfaceId (pluginToReplaceUID)); const auto iter = parameterMap.find (oldParamID); @@ -1215,24 +1221,26 @@ public: // As an IEditController member, the host should only call this from the message thread. assertHostMessageThread(); - if (auto* pluginInstance = getPluginInstance()) + if (audioProcessor != nullptr) { + auto* pluginInstance = getPluginInstance(); + for (auto vstParamId : audioProcessor->getParamIDs()) { - auto paramValue = [&] + auto paramValue = std::invoke ([&] { - if (vstParamId == audioProcessor->getProgramParamID()) + if (vstParamId == audioProcessor->getProgramParamID() && pluginInstance != nullptr) return EditController::plainParamToNormalized (audioProcessor->getProgramParamID(), pluginInstance->getCurrentProgram()); return (double) audioProcessor->getParamForVSTParamID (vstParamId)->getValue(); - }(); + }); setParamNormalized (vstParamId, paramValue); } - } - audioProcessor->updateParameterMapping(); + audioProcessor->updateParameterMapping(); + } if (auto* handler = getComponentHandler()) handler->restartComponent (Vst::kParamValuesChanged | Vst::kParamIDMappingChanged);