From 8d709f857427bc069214ee0fa1e4f38aec5705b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stefan=20B=C3=BChler?= Date: Tue, 13 Mar 2012 00:19:56 +0100 Subject: [PATCH] [ipv6 parser] Fix type-punned memory access --- src/common/ip_parsers.rl | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/common/ip_parsers.rl b/src/common/ip_parsers.rl index 5da8c87..354b996 100644 --- a/src/common/ip_parsers.rl +++ b/src/common/ip_parsers.rl @@ -88,13 +88,13 @@ gboolean li_parse_ipv4(const char *str, guint32 *ip, guint32 *netmask, guint16 * ipv4_data = octet "." octet "." octet "." octet; pre_ipv4 = ipv4_data %{ if (prec > 6) { res = FALSE; fbreak; } - predata[prec++] = *(guint16*) (data); - predata[prec++] = *(guint16*) (data+2); + memcpy(&predata[prec], data, 4); + prec += 2; }; post_ipv4 = ipv4_data %{ if (postc > 6) { res = FALSE; fbreak; } - postdata[postc++] = *(guint16*) (data); - postdata[postc++] = *(guint16*) (data+2); + memcpy(&postdata[postc], data, 4); + postc += 2; }; ipv6_data = ((pregroup ":")+ | ":") ((":" @ { compressed = TRUE; } (postgroup ":")* (postgroup | post_ipv4)?) | (pregroup | pre_ipv4));