diff options
author | Test_User <hax@andrewyu.org> | 2024-05-25 05:54:28 -0400 |
---|---|---|
committer | Test_User <hax@andrewyu.org> | 2024-05-25 05:54:28 -0400 |
commit | 21cd568250cf56120a0cf9258d3ba266ce15de34 (patch) | |
tree | 685bda30abeba60a5a7d11e851653ed5163120d5 /utils.c | |
parent | 0e9106480abb0247f8771c0394863640db4eebc0 (diff) | |
download | coupserv-21cd568250cf56120a0cf9258d3ba266ce15de34.tar.gz coupserv-21cd568250cf56120a0cf9258d3ba266ce15de34.zip |
Overflow prevention in str_to_unsigned
Diffstat (limited to '')
-rw-r--r-- | utils.c | 10 |
1 files changed, 9 insertions, 1 deletions
@@ -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; |