diff options
author | Ivan Nardi <12729895+IvanNardi@users.noreply.github.com> | 2021-09-23 13:24:49 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-09-23 13:24:49 +0200 |
commit | 7eb73bc92abebe60dde5626673b342a3d9601eb2 (patch) | |
tree | 22ed2de3f9998eb19ffd411128089f1accb7496a | |
parent | 0994771974d686aa5395c5ba0fe71acef0d62e9d (diff) |
QUIC: fix old GQUIC versions on big-endian machines (#1313)
-rw-r--r-- | src/include/ndpi_define.h.in | 40 | ||||
-rw-r--r-- | src/lib/protocols/quic.c | 4 |
2 files changed, 42 insertions, 2 deletions
diff --git a/src/include/ndpi_define.h.in b/src/include/ndpi_define.h.in index e959b23a9..150b04940 100644 --- a/src/include/ndpi_define.h.in +++ b/src/include/ndpi_define.h.in @@ -385,6 +385,46 @@ #endif /* __APPLE__ */ + +#if defined(__MINGW32__) + +#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ + +#define htobe16(x) htons(x) +#define htole16(x) (x) +#define be16toh(x) ntohs(x) +#define le16toh(x) (x) +#define htobe32(x) htonl(x) +#define htole32(x) (x) +#define be32toh(x) ntohl(x) +#define le32toh(x) (x) +#define htobe64(x) htonll(x) +#define htole64(x) (x) +#define be64toh(x) ntohll(x) +#define le64toh(x) (x) + +#elif __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ + +#define htobe16(x) (x) +#define htole16(x) __builtin_bswap16(x) +#define be16toh(x) (x) +#define le16toh(x) __builtin_bswap16(x) +#define htobe32(x) (x) +#define htole32(x) __builtin_bswap32(x) +#define be32toh(x) (x) +#define le32toh(x) __builtin_bswap32(x) +#define htobe64(x) (x) +#define htole64(x) __builtin_bswap64(x) +#define be64toh(x) (x) +#define le64toh(x) __builtin_bswap64(x) + +#else +#error Unexpected __BYTE_ORDER__ + +#endif /* __BYTE_ORDER__ */ +#endif /* __MINGW32__ */ + + #ifndef ETH_ARP #define ETH_ARP 0x0806 #endif diff --git a/src/lib/protocols/quic.c b/src/lib/protocols/quic.c index 7db718ac8..5eb5e1a01 100644 --- a/src/lib/protocols/quic.c +++ b/src/lib/protocols/quic.c @@ -1343,7 +1343,7 @@ static void process_chlo(struct ndpi_detection_module_struct *ndpi_struct, #endif return; } - num_tags = (*(uint16_t *)&crypto_data[4]); + num_tags = le16toh(*(uint16_t *)&crypto_data[4]); tag_offset_start = 8 + 8 * num_tags; prev_offset = 0; @@ -1351,7 +1351,7 @@ static void process_chlo(struct ndpi_detection_module_struct *ndpi_struct, if(8 + 8 * i + 8 >= crypto_data_len) break; tag = &crypto_data[8 + 8 * i]; - offset = *((u_int32_t *)&crypto_data[8 + 8 * i + 4]); + offset = le32toh(*((u_int32_t *)&crypto_data[8 + 8 * i + 4])); if(prev_offset > offset) break; len = offset - prev_offset; |