From 21cd568250cf56120a0cf9258d3ba266ce15de34 Mon Sep 17 00:00:00 2001 From: Test_User Date: Sat, 25 May 2024 05:54:28 -0400 Subject: Overflow prevention in str_to_unsigned --- utils.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/utils.c b/utils.c index 10079d2..db0df78 100644 --- a/utils.c +++ b/utils.c @@ -49,8 +49,16 @@ uint64_t str_to_unsigned(struct string str, char *err) { case '7': case '8': case '9': + if (val > ((uint64_t)-1)/10) { + *err = 1; + return 0; + } val *= 10; - val += (uint8_t)(str.data[0] - 0x30); + if (val > (-((uint64_t)((uint8_t)str.data[0] - 0x30) + 1))) { + *err = 1; + return 0; + } + val += (uint8_t)str.data[0] - 0x30; break; default: *err = 1; -- cgit v1.2.3