Clamp accuracy_decimals to -9 to prevent uint32_t overflow

This commit is contained in:
J. Nick Koston
2026-02-19 12:17:19 -06:00
parent 2bb077cb1f
commit d2b7d40716

View File

@@ -468,14 +468,16 @@ ParseOnOffState parse_on_off(const char *str, const char *on, const char *off) {
static inline void normalize_accuracy_decimals(float &value, int8_t &accuracy_decimals) {
if (accuracy_decimals < 0) {
// Clamp to -9 to keep divisor within uint32_t range (max 10^9 = 1,000,000,000)
int8_t dec = accuracy_decimals < -9 ? (int8_t) -9 : accuracy_decimals;
uint32_t divisor;
if (accuracy_decimals == -1) {
if (dec == -1) {
divisor = 10;
} else if (accuracy_decimals == -2) {
} else if (dec == -2) {
divisor = 100;
} else {
divisor = 1000;
for (int8_t i = accuracy_decimals + 3; i < 0; i++)
for (int8_t i = dec + 3; i < 0; i++)
divisor *= 10;
}
auto divisor_f = static_cast<float>(divisor);