diff options
Diffstat (limited to 'plugins/utils.c')
-rw-r--r-- | plugins/utils.c | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/plugins/utils.c b/plugins/utils.c index e871c5f7..aff17906 100644 --- a/plugins/utils.c +++ b/plugins/utils.c | |||
@@ -258,16 +258,25 @@ bool is_int64(char *number, int64_t *target) { | |||
258 | */ | 258 | */ |
259 | bool is_uint64(char *number, uint64_t *target) { | 259 | bool is_uint64(char *number, uint64_t *target) { |
260 | errno = 0; | 260 | errno = 0; |
261 | uint64_t tmp = strtoll(number, NULL, 10); | 261 | char *endptr = { 0 }; |
262 | unsigned long long tmp = strtoull(number, &endptr, 10); | ||
263 | |||
262 | if (errno != 0) { | 264 | if (errno != 0) { |
263 | return false; | 265 | return false; |
264 | } | 266 | } |
265 | if (tmp < 0 || tmp > UINT64_MAX) { | 267 | |
268 | if (*endptr != '\0') { | ||
266 | return false; | 269 | return false; |
267 | } | 270 | } |
271 | |||
272 | if (tmp > UINT64_MAX) { | ||
273 | return false; | ||
274 | } | ||
275 | |||
268 | if (target != NULL) { | 276 | if (target != NULL) { |
269 | *target = tmp; | 277 | *target = (uint64_t)tmp; |
270 | } | 278 | } |
279 | |||
271 | return true; | 280 | return true; |
272 | } | 281 | } |
273 | 282 | ||