]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
CLEANUP: lua: fix aliasing issues in the address matching code
authorWilly Tarreau <w@1wt.eu>
Tue, 25 Feb 2020 09:02:51 +0000 (10:02 +0100)
committerWilly Tarreau <w@1wt.eu>
Tue, 25 Feb 2020 09:24:51 +0000 (10:24 +0100)
Just use read_u32() instead of casting IPv6 addresses to uint32_t*.

src/hlua_fcn.c

index f8024aa84986106751ed798830b8174c121c48fd..29c0bf4071800068194d5ac21ef7c63abcd2c370 100644 (file)
@@ -18,6 +18,7 @@
 #include <lua.h>
 #include <lualib.h>
 
+#include <common/net_helper.h>
 #include <common/time.h>
 #include <common/uri_auth.h>
 
@@ -1520,10 +1521,10 @@ int hlua_match_addr(lua_State *L)
                int i;
 
                for (i = 0; i < 16; i += 4) {
-                       if ((*(uint32_t *)&addr1->addr.v6.ip.s6_addr[i] &
-                            *(uint32_t *)&addr2->addr.v6.mask.s6_addr[i]) !=
-                           (*(uint32_t *)&addr2->addr.v6.ip.s6_addr[i] &
-                            *(uint32_t *)&addr1->addr.v6.mask.s6_addr[i]))
+                       if ((read_u32(&addr1->addr.v6.ip.s6_addr[i]) &
+                            read_u32(&addr2->addr.v6.mask.s6_addr[i])) !=
+                           (read_u32(&addr2->addr.v6.ip.s6_addr[i]) &
+                            read_u32(&addr1->addr.v6.mask.s6_addr[i])))
                                break;
                }
                if (i == 16) {