aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTobias Brunner <tobias@strongswan.org>2014-10-22 19:41:40 +0200
committerTobias Brunner <tobias@strongswan.org>2014-10-23 11:13:28 +0200
commiteb218ff80b8f6b88ed74249a9c6fecb860454110 (patch)
treec750511ff5614dc11b4de8e5b2347912b0437dc1
parent4736ba06578f860a85e84cec1c79fb126793307e (diff)
downloadstrongswan-eb218ff80b8f6b88ed74249a9c6fecb860454110.tar.bz2
strongswan-eb218ff80b8f6b88ed74249a9c6fecb860454110.tar.xz
chunk: Fix internet checksum calculation on big-endian systems
ntohs() might be defined as noop (#define ntohs(x) (x)) so we have to manually shorten the negated value (gets promoted to an int). Fixes #747.
-rw-r--r--src/libstrongswan/utils/chunk.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/src/libstrongswan/utils/chunk.c b/src/libstrongswan/utils/chunk.c
index 4b24b37c2..c4471be70 100644
--- a/src/libstrongswan/utils/chunk.c
+++ b/src/libstrongswan/utils/chunk.c
@@ -992,7 +992,7 @@ u_int32_t chunk_hash_static(chunk_t chunk)
*/
u_int16_t chunk_internet_checksum_inc(chunk_t data, u_int16_t checksum)
{
- u_int32_t sum = ntohs(~checksum);
+ u_int32_t sum = ntohs((u_int16_t)~checksum);
while (data.len > 1)
{