summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSolomon Peachy <pizza@shaftnet.org>2020-04-18 10:23:26 -0400
committerSolomon Peachy <pizza@shaftnet.org>2020-07-21 02:20:26 +0000
commitbf546fbfcbf87f7ce44a36f8696ff5acd15f6817 (patch)
tree877beedb82f1616a6e2aa1ca4fd93a95025ae104
parent5c30d57ad1391043d773e770b9014fb2fce9c500 (diff)
downloadrockbox-bf546fbfcbf87f7ce44a36f8696ff5acd15f6817.tar.gz
rockbox-bf546fbfcbf87f7ce44a36f8696ff5acd15f6817.tar.bz2
rockbox-bf546fbfcbf87f7ce44a36f8696ff5acd15f6817.zip
Run-time validation of INT settings.
Check against min/max/step parameters Many places this value is used as an index into an array; this will help prevent array overflows and undefined/undesireable behavior. Some fields accept arbitary values, continue to accept those. Change-Id: Idbb5a17b7ceae5500660987703e2d6c16e920c92
-rw-r--r--apps/settings.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/apps/settings.c b/apps/settings.c
index 2841133957..32391a1f53 100644
--- a/apps/settings.c
+++ b/apps/settings.c
@@ -311,7 +311,13 @@ bool settings_load_config(const char* file, bool apply)
#endif
if (settings[i].cfg_vals == NULL)
{
- *(int*)settings[i].setting = atoi(value);
+ if (settings[i].flags&F_ALLOW_ARBITRARY_VALS ||
+ (temp >= settings[i].int_setting->min &&
+ temp <= settings[i].int_setting->max &&
+ temp % settings[i].int_setting->step == 0))
+ {
+ *(int*)settings[i].setting = atoi(value);
+ }
}
else
{