aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTest_User <hax@andrewyu.org>2024-05-25 05:54:28 -0400
committerTest_User <hax@andrewyu.org>2024-05-25 05:54:28 -0400
commit21cd568250cf56120a0cf9258d3ba266ce15de34 (patch)
tree685bda30abeba60a5a7d11e851653ed5163120d5
parent0e9106480abb0247f8771c0394863640db4eebc0 (diff)
downloadcoupserv-21cd568250cf56120a0cf9258d3ba266ce15de34.tar.gz
coupserv-21cd568250cf56120a0cf9258d3ba266ce15de34.zip
Overflow prevention in str_to_unsigned
-rw-r--r--utils.c10
1 files changed, 9 insertions, 1 deletions
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;