clap

CLAP Audio Plugin API
Log | Files | Refs | README | LICENSE

commit a03b7f0dc0839ec5a2e27f7c435533c42ba560d0
parent 5aabf491b0d31e5eb151636930f1eb96dff54031
Author: Alexandre BIQUE <bique.alexandre@gmail.com>
Date:   Wed,  2 Jun 2021 01:00:29 +0200

More checks

Diffstat:
Mexamples/plugins/plugin.cc | 53++++++++++++++++++++++++++++++++++++++++++++++++++++-
Mexamples/plugins/plugin.hh | 4+++-
2 files changed, 55 insertions(+), 2 deletions(-)

diff --git a/examples/plugins/plugin.cc b/examples/plugins/plugin.cc @@ -296,6 +296,13 @@ namespace clap { auto &self = from(plugin); self.ensureMainThread("clap_plugin_params.enum_value"); + if (!self.isValidParamId(param_id)) { + std::ostringstream msg; + msg << "clap_plugin_params.enum_value called with invalid param_id: " << param_id; + self.hostMisbehaving(msg.str()); + return false; + } + // TODO: check the value index? return self.paramsEnumValue(param_id, value_index, value); @@ -306,6 +313,13 @@ namespace clap { auto &self = from(plugin); self.ensureMainThread("clap_plugin_params.value"); + if (!self.isValidParamId(param_id)) { + std::ostringstream msg; + msg << "clap_plugin_params.value called with invalid param_id: " << param_id; + self.hostMisbehaving(msg.str()); + return false; + } + // TODO extra checks return self.paramsValue(param_id, value); @@ -324,6 +338,13 @@ namespace clap { return false; } + if (!self.isValidParamId(param_id)) { + std::ostringstream msg; + msg << "clap_plugin_params.set_value called with invalid param_id: " << param_id; + self.hostMisbehaving(msg.str()); + return false; + } + // TODO: extra checks return self.paramsSetValue(param_id, value, modulation); @@ -337,6 +358,13 @@ namespace clap { auto &self = from(plugin); self.ensureMainThread("clap_plugin_params.value_to_text"); + if (!self.isValidParamId(param_id)) { + std::ostringstream msg; + msg << "clap_plugin_params.value_to_text called with invalid param_id: " << param_id; + self.hostMisbehaving(msg.str()); + return false; + } + // TODO: extra checks return self.paramsValueToText(param_id, value, display, size); } @@ -348,10 +376,33 @@ namespace clap { auto &self = from(plugin); self.ensureMainThread("clap_plugin_params.text_to_value"); + if (!self.isValidParamId(param_id)) { + std::ostringstream msg; + msg << "clap_plugin_params.text_to_value called with invalid param_id: " << param_id; + self.hostMisbehaving(msg.str()); + return false; + } + // TODO: extra checks return self.paramsTextToValue(param_id, display, value); } + bool Plugin::isValidParamId(clap_id param_id) const noexcept { + checkMainThread(); + + auto count = paramsCount(); + clap_param_info info; + for (uint32_t i = 0; i < count; ++i) { + if (!paramsInfo(i, &info)) + // TODO: fatal error? + continue; + + if (info.id == param_id) + return true; + } + return false; + } + ///////////// // Logging // ///////////// @@ -379,7 +430,7 @@ namespace clap { // Thread Checking // ///////////////////// - void Plugin::checkMainThread() { + void Plugin::checkMainThread() const { if (!hostThreadCheck_ || !hostThreadCheck_->is_main_thread || hostThreadCheck_->is_main_thread(host_)) return; diff --git a/examples/plugins/plugin.hh b/examples/plugins/plugin.hh @@ -96,7 +96,7 @@ namespace clap { ///////////////////// // Thread Checking // ///////////////////// - void checkMainThread(); + void checkMainThread() const; void ensureMainThread(const char *method); void ensureAudioThread(const char *method); @@ -112,6 +112,8 @@ namespace clap { static uint32_t compareAudioPortsInfo(const clap_audio_port_info &a, const clap_audio_port_info &b) noexcept; + virtual bool isValidParamId(clap_id param_id) const noexcept; + ////////////////////// // Processing State // //////////////////////