This patch changes the endian conversion macros in endian.h to cast their result to the unsigned type of the corresponding size (as described in the bug report).
diff -urN eglibc-2.19/string/endian.h eglibc-2.19.mine/string/endian.h --- eglibc-2.19/string/endian.h 2014-01-03 17:51:28.000000000 +0000 +++ eglibc-2.19.mine/string/endian.h 2014-06-12 15:35:25.192649179 +0000 @@ -58,37 +58,38 @@ #if defined __USE_BSD && !defined __ASSEMBLER__ /* Conversion interfaces. */ # include <bits/byteswap.h> +# include <stdint.h> # if __BYTE_ORDER == __LITTLE_ENDIAN # define htobe16(x) __bswap_16 (x) -# define htole16(x) (x) +# define htole16(x) (uint16_t)(x) # define be16toh(x) __bswap_16 (x) -# define le16toh(x) (x) +# define le16toh(x) (uint16_t)(x) # define htobe32(x) __bswap_32 (x) -# define htole32(x) (x) +# define htole32(x) (uint32_t)(x) # define be32toh(x) __bswap_32 (x) -# define le32toh(x) (x) +# define le32toh(x) (uint32_t)(x) # define htobe64(x) __bswap_64 (x) -# define htole64(x) (x) +# define htole64(x) (uint64_t)(x) # define be64toh(x) __bswap_64 (x) -# define le64toh(x) (x) +# define le64toh(x) (uint64_t)(x) # else -# define htobe16(x) (x) +# define htobe16(x) (uint16_t)(x) # define htole16(x) __bswap_16 (x) -# define be16toh(x) (x) +# define be16toh(x) (uint16_t)(x) # define le16toh(x) __bswap_16 (x) -# define htobe32(x) (x) +# define htobe32(x) (uint32_t)(x) # define htole32(x) __bswap_32 (x) -# define be32toh(x) (x) +# define be32toh(x) (uint32_t)(x) # define le32toh(x) __bswap_32 (x) -# define htobe64(x) (x) +# define htobe64(x) (uint64_t)(x) # define htole64(x) __bswap_64 (x) -# define be64toh(x) (x) +# define be64toh(x) (uint64_t)(x) # define le64toh(x) __bswap_64 (x) # endif #endif
Attachment:
signature.asc
Description: Digital signature