summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWilliam Wilgus <me.theuser@yahoo.com>2018-11-07 23:29:59 -0500
committerWilliam Wilgus <me.theuser@yahoo.com>2019-01-08 03:44:32 +0100
commit3f6fed8eca790138e9ac80cb3b38b6791269982b (patch)
tree4ffecef8f41f31e18557a4a90449da85ddade306
parentd24edc605b9b52d3610efbb9cf691c437ea00746 (diff)
downloadrockbox-3f6fed8eca790138e9ac80cb3b38b6791269982b.tar.gz
rockbox-3f6fed8eca790138e9ac80cb3b38b6791269982b.zip
Fix potential buffer overflow in settings.c
Change-Id: Ie8953e3ffc5188685f1ea056863bfbdb817080a7
-rw-r--r--apps/settings.c15
1 files changed, 9 insertions, 6 deletions
diff --git a/apps/settings.c b/apps/settings.c
index 9f3047e9df..2d38c4a5ef 100644
--- a/apps/settings.c
+++ b/apps/settings.c
@@ -402,8 +402,8 @@ bool cfg_int_to_string(int setting_id, int val, char* buf, int buf_len)
402 strlcpy(buf, start, buf_len); 402 strlcpy(buf, start, buf_len);
403 else 403 else
404 { 404 {
405 int len = (buf_len > (end-start))? end-start: buf_len; 405 int len = MIN(buf_len, (end-start) + 1);
406 strlcpy(buf, start, len+1); 406 strlcpy(buf, start, len);
407 } 407 }
408 return true; 408 return true;
409 } 409 }
@@ -430,8 +430,8 @@ bool cfg_int_to_string(int setting_id, int val, char* buf, int buf_len)
430 strlcpy(buf, start, buf_len); 430 strlcpy(buf, start, buf_len);
431 else 431 else
432 { 432 {
433 int len = (buf_len > (end-start))? end-start: buf_len; 433 int len = MIN(buf_len, (end-start) + 1);
434 strlcpy(buf, start, len+1); 434 strlcpy(buf, start, len);
435 } 435 }
436 return true; 436 return true;
437} 437}
@@ -494,8 +494,11 @@ bool cfg_to_string(int i/*setting_id*/, char* buf, int buf_len)
494 settings[i].filename_setting->suffix); 494 settings[i].filename_setting->suffix);
495 } 495 }
496 } 496 }
497 else strlcpy(buf,(char*)settings[i].setting, 497 else
498 settings[i].filename_setting->max_len); 498 {
499 int len = MIN(buf_len, settings[i].filename_setting->max_len);
500 strlcpy(buf,(char*)settings[i].setting,len);
501 }
499 break; 502 break;
500 } /* switch () */ 503 } /* switch () */
501 return true; 504 return true;