commit 9d58eaee1f474a1bccf7f0b9ae2328b0227950ac parent ca715348d35207dc14695b5b20acb3305e7b294d Author: Evgeny Grin (Karlson2k) <k2k@narod.ru> Date: Sat, 8 Aug 2015 12:29:51 +0000 daemon.c: MHD_get_timeout(): check for value overflow Diffstat:
| M | src/microhttpd/MHD_limits.h | | | 4 | ++++ |
| M | src/microhttpd/daemon.c | | | 8 | +++++++- |
2 files changed, 11 insertions(+), 1 deletion(-)
diff --git a/src/microhttpd/MHD_limits.h b/src/microhttpd/MHD_limits.h @@ -36,6 +36,10 @@ #define LONG_MAX ((long) ~(((uint64_t) 1) << (8 * sizeof(long) - 1))) #endif /* !OFF_T_MAX */ +#ifndef ULLONG_MAX +#define ((MHD_UNSIGNED_LONG_LONG) ~((MHD_UNSIGNED_LONG_LONG)0)) +#endif /* !ULLONG_MAX */ + #ifndef INT32_MAX #define INT32_MAX ((int32_t)0x7FFFFFFF) #endif /* !INT32_MAX */ diff --git a/src/microhttpd/daemon.c b/src/microhttpd/daemon.c @@ -2179,7 +2179,13 @@ MHD_get_timeout (struct MHD_Daemon *daemon, if (earliest_deadline < now) *timeout = 0; else - *timeout = 1000 * (1 + earliest_deadline - now); + { + const time_t second_left = earliest_deadline - now; + if (second_left > ULLONG_MAX / 1000) + *timeout = ULLONG_MAX; + else + *timeout = 1000 * second_left; + } return MHD_YES; }