diff options
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; |