mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2026-05-03 06:47:04 -04:00
modules: protect against invalid input and 0 division
Don't crash when the AEC reported latency is invalid. Check that the parsed values make sense and avoid division by 0.
This commit is contained in:
parent
6f6b58785e
commit
a4fb06073c
1 changed files with 15 additions and 7 deletions
|
|
@ -1587,19 +1587,27 @@ int pipewire__module_init(struct pw_impl_module *module, const char *args)
|
|||
goto error;
|
||||
}
|
||||
|
||||
unsigned int num = 0, denom = 1;
|
||||
if (impl->aec->latency) {
|
||||
unsigned int num, denom, req_num, req_denom;
|
||||
|
||||
if (sscanf(impl->aec->latency, "%u/%u", &num, &denom) != 2) {
|
||||
pw_log_warn("Invalid AEC latency '%s', assuming 0", impl->aec->latency);
|
||||
num = 0;
|
||||
denom = 1;
|
||||
}
|
||||
}
|
||||
if (num != 0 && denom != 0) {
|
||||
unsigned int req_num = 0, req_denom = 1;
|
||||
unsigned int factor = 0;
|
||||
unsigned int new_num = 0;
|
||||
|
||||
spa_assert_se(sscanf(impl->aec->latency, "%u/%u", &num, &denom) == 2);
|
||||
|
||||
if ((str = pw_properties_get(props, PW_KEY_NODE_LATENCY)) != NULL) {
|
||||
sscanf(str, "%u/%u", &req_num, &req_denom);
|
||||
factor = (req_num * denom) / (req_denom * num);
|
||||
new_num = req_num / factor * factor;
|
||||
if (sscanf(str, "%u/%u", &req_num, &req_denom) == 2 &&
|
||||
req_denom != 0) {
|
||||
factor = (req_num * denom) / (req_denom * num);
|
||||
new_num = req_num / factor * factor;
|
||||
}
|
||||
}
|
||||
|
||||
if (factor == 0 || new_num == 0) {
|
||||
pw_log_info("Setting node latency to %s", impl->aec->latency);
|
||||
pw_properties_set(props, PW_KEY_NODE_LATENCY, impl->aec->latency);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue