diff options
author | Evgeny Grin (Karlson2k) <k2k@narod.ru> | 2015-08-08 12:29:51 +0000 |
---|---|---|
committer | Evgeny Grin (Karlson2k) <k2k@narod.ru> | 2015-08-08 12:29:51 +0000 |
commit | 9d58eaee1f474a1bccf7f0b9ae2328b0227950ac (patch) | |
tree | 516ef3ae726dcda58303a6c77fc929812b358057 /src | |
parent | ca715348d35207dc14695b5b20acb3305e7b294d (diff) | |
download | libmicrohttpd-9d58eaee1f474a1bccf7f0b9ae2328b0227950ac.tar.gz libmicrohttpd-9d58eaee1f474a1bccf7f0b9ae2328b0227950ac.zip |
daemon.c: MHD_get_timeout(): check for value overflow
Diffstat (limited to 'src')
-rw-r--r-- | src/microhttpd/MHD_limits.h | 4 | ||||
-rw-r--r-- | src/microhttpd/daemon.c | 8 |
2 files changed, 11 insertions, 1 deletions
diff --git a/src/microhttpd/MHD_limits.h b/src/microhttpd/MHD_limits.h index d7ceb9f2..2236b08e 100644 --- a/src/microhttpd/MHD_limits.h +++ b/src/microhttpd/MHD_limits.h | |||
@@ -36,6 +36,10 @@ | |||
36 | #define LONG_MAX ((long) ~(((uint64_t) 1) << (8 * sizeof(long) - 1))) | 36 | #define LONG_MAX ((long) ~(((uint64_t) 1) << (8 * sizeof(long) - 1))) |
37 | #endif /* !OFF_T_MAX */ | 37 | #endif /* !OFF_T_MAX */ |
38 | 38 | ||
39 | #ifndef ULLONG_MAX | ||
40 | #define ((MHD_UNSIGNED_LONG_LONG) ~((MHD_UNSIGNED_LONG_LONG)0)) | ||
41 | #endif /* !ULLONG_MAX */ | ||
42 | |||
39 | #ifndef INT32_MAX | 43 | #ifndef INT32_MAX |
40 | #define INT32_MAX ((int32_t)0x7FFFFFFF) | 44 | #define INT32_MAX ((int32_t)0x7FFFFFFF) |
41 | #endif /* !INT32_MAX */ | 45 | #endif /* !INT32_MAX */ |
diff --git a/src/microhttpd/daemon.c b/src/microhttpd/daemon.c index 7807dab9..9a94bd92 100644 --- a/src/microhttpd/daemon.c +++ b/src/microhttpd/daemon.c | |||
@@ -2179,7 +2179,13 @@ MHD_get_timeout (struct MHD_Daemon *daemon, | |||
2179 | if (earliest_deadline < now) | 2179 | if (earliest_deadline < now) |
2180 | *timeout = 0; | 2180 | *timeout = 0; |
2181 | else | 2181 | else |
2182 | *timeout = 1000 * (1 + earliest_deadline - now); | 2182 | { |
2183 | const time_t second_left = earliest_deadline - now; | ||
2184 | if (second_left > ULLONG_MAX / 1000) | ||
2185 | *timeout = ULLONG_MAX; | ||
2186 | else | ||
2187 | *timeout = 1000 * second_left; | ||
2188 | } | ||
2183 | return MHD_YES; | 2189 | return MHD_YES; |
2184 | } | 2190 | } |
2185 | 2191 | ||