particle/ramp: clamp min/max/value

Make sure that:

* min <= max
* min <= value <= max

Fixes a crash when the tag’s value was out-of-bounds.

Closes #45
This commit is contained in:
Daniel Eklöf 2021-04-22 11:44:09 +02:00
parent db7a4af80a
commit f9dad99db8
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F
2 changed files with 26 additions and 1 deletions

View file

@ -20,6 +20,8 @@
* Crash when merging non-dictionary anchors in the YAML configuration
(https://codeberg.org/dnkl/yambar/issues/32).
* Crash in the `ramp` particle when the tags value was out-of-bounds
(https://codeberg.org/dnkl/yambar/issues/45).
### Security

View file

@ -4,6 +4,9 @@
#include <stdio.h>
#define LOG_MODULE "ramp"
#define LOG_ENABLE_DBG 0
#include "../log.h"
#include "../config.h"
#include "../config-verify.h"
#include "../particle.h"
@ -102,6 +105,26 @@ instantiate(const struct particle *particle, const struct tag_set *tags)
long min = tag != NULL ? tag->min(tag) : 0;
long max = tag != NULL ? tag->max(tag) : 0;
if (min > max) {
LOG_WARN(
"tag's minimum value is greater than its maximum: "
"tag=\"%s\", min=%ld, max=%ld", p->tag, min, max);
min = max;
}
if (value < min) {
LOG_WARN(
"tag's value is less than its minimum value: "
"tag=\"%s\", min=%ld, value=%ld", p->tag, min, value);
value = min;
}
if (value > max) {
LOG_WARN(
"tag's value is greater than its maximum value: "
"tag=\"%s\", max=%ld, value=%ld", p->tag, max, value);
value = max;
}
assert(value >= min && value <= max);
assert(max >= min);