From: Tobias Brunner Date: Wed, 22 Oct 2014 17:41:40 +0000 (+0200) Subject: chunk: Fix internet checksum calculation on big-endian systems X-Git-Tag: 5.2.2dr1~56 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=eb218ff80b8f6b88ed74249a9c6fecb860454110;p=thirdparty%2Fstrongswan.git 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. --- diff --git a/src/libstrongswan/utils/chunk.c b/src/libstrongswan/utils/chunk.c index 4b24b37c25..c4471be707 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) {