diff options
-rw-r--r-- | src/modules/module-ladspa-sink.c | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/src/modules/module-ladspa-sink.c b/src/modules/module-ladspa-sink.c index d4351b2f..ef4ad3fb 100644 --- a/src/modules/module-ladspa-sink.c +++ b/src/modules/module-ladspa-sink.c @@ -441,7 +441,7 @@ int pa__init(pa_module*m) { use_default = pa_xnew(pa_bool_t, n_control); p = 0; - while ((k = pa_split(cdata, ",", &state))) { + while ((k = pa_split(cdata, ",", &state)) && p < n_control) { float f; if (*k == 0) { @@ -458,15 +458,23 @@ int pa__init(pa_module*m) { pa_xfree(k); - if (p >= n_control) { - pa_log("Too many control values passed, %lu expected.", n_control); - goto fail; - } - use_default[p] = FALSE; u->control[p++] = f; } + /* The previous loop doesn't take the last control value into account + if it is left empty, so we do it here. */ + if (*cdata == 0 || cdata[strlen(cdata) - 1] == ',') { + if (p < n_control) + use_default[p] = TRUE; + p++; + } + + if (p > n_control) { + pa_log("Too many control values passed, %lu expected.", n_control); + goto fail; + } + if (p < n_control) { pa_log("Not enough control values passed, %lu expected, %lu passed.", n_control, p); goto fail; |