diff options
author | Dimitri Staessens <dimitri@ouroboros.rocks> | 2019-03-18 20:44:38 +0100 |
---|---|---|
committer | Sander Vrijders <sander@ouroboros.rocks> | 2019-03-18 21:00:59 +0100 |
commit | bb724cad016fba5775e751c817df0a07136d223f (patch) | |
tree | 9c33310c5f45eb6afc62579c149f29eb45a8af26 | |
parent | 0d75cc553b584c0b5d55016af51a6fa9994ca49d (diff) | |
download | ouroboros-bb724cad016fba5775e751c817df0a07136d223f.tar.gz ouroboros-bb724cad016fba5775e751c817df0a07136d223f.zip |
ipcpd: Fix strict aliasing warning0.15.1
Some versions of gcc seem to give a positive on the strict aliasing
rule. It's absent from newer gcc versions or clang. However, rather
than disabling the check for older version, this small rewrite seems to
temporarily fix the false positive. Apparently, it's undefined
behaviour to simply cast a char/uint8_t buffer to a variable type
pointer and then dereference the type. A more elaborate patch to fix
the undefined behaviour is needed.
Signed-off-by: Dimitri Staessens <dimitri@ouroboros.rocks>
Signed-off-by: Sander Vrijders <sander@ouroboros.rocks>
-rw-r--r-- | CMakeLists.txt | 2 | ||||
-rw-r--r-- | src/ipcpd/udp/main.c | 14 |
2 files changed, 9 insertions, 7 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 9585ad2f..d7bbff2a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -9,7 +9,7 @@ include(GNUInstallDirs) set(PACKAGE_VERSION_MAJOR 0) set(PACKAGE_VERSION_MINOR 15) -set(PACKAGE_VERSION_PATCH 0) +set(PACKAGE_VERSION_PATCH 1) set(PACKAGE_NAME "${CMAKE_PROJECT_NAME}") set(PACKAGE_DESCRIPTION "The Ouroboros prototype") diff --git a/src/ipcpd/udp/main.c b/src/ipcpd/udp/main.c index 559be55a..9f45bc73 100644 --- a/src/ipcpd/udp/main.c +++ b/src/ipcpd/udp/main.c @@ -438,14 +438,16 @@ static void * ipcp_udp_mgmt_handler(void * o) static void * ipcp_udp_packet_reader(void * o) { - uint8_t buf[IPCP_UDP_MAX_PACKET_SIZE]; - uint8_t * data; - ssize_t n; - uint32_t eid; + uint8_t buf[IPCP_UDP_MAX_PACKET_SIZE]; + uint8_t * data; + ssize_t n; + uint32_t eid; + uint32_t * eid_p; (void) o; - data = buf + sizeof(uint32_t); + data = buf + sizeof(uint32_t); + eid_p = (uint32_t *) buf; while (true) { struct mgmt_frame * frame; @@ -467,7 +469,7 @@ static void * ipcp_udp_packet_reader(void * o) continue; } - eid = ntoh32(*((uint32_t *) buf)); + eid = ntoh32(*eid_p); /* pass onto mgmt queue */ if (eid == MGMT_EID) { |