Skip to content

Commit 77854ed

Browse files
airweenFelipe Zimmerle
authored andcommitted
Fix inet addr handling on 64 bit big endian systems
1 parent dccb5e9 commit 77854ed

File tree

1 file changed

+10
-11
lines changed

1 file changed

+10
-11
lines changed

src/utils/msc_tree.cc

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -832,7 +832,7 @@ TreeNode *TreeAddIP(const char *buffer, CPTTree *tree, int type) {
832832
switch(type) {
833833

834834
case IPV4_TREE:
835-
memset(&addr4, 0, sizeof(addr4));
835+
memset(&(addr4.s_addr), 0, sizeof(addr4.s_addr));
836836
memset(ip_strv4, 0x0, NETMASK_32);
837837

838838
strncpy(ip_strv4, buffer, sizeof(ip_strv4));
@@ -857,18 +857,17 @@ TreeNode *TreeAddIP(const char *buffer, CPTTree *tree, int type) {
857857
ip_strv4[pos] = '\0';
858858
}
859859

860-
ret = inet_pton(AF_INET, ip_strv4, &addr4);
860+
ret = inet_pton(AF_INET, ip_strv4, &(addr4.s_addr));
861861

862862
if (ret <= 0) {
863863
return NULL;
864864
}
865-
ip = addr4.s_addr;
866865

867866
tree->count++;
868-
return CPTAddElement((unsigned char *)&ip, NETMASK_32, tree, netmask_v4);
867+
return CPTAddElement((unsigned char *)&(addr4.s_addr), NETMASK_32, tree, netmask_v4);
869868

870869
case IPV6_TREE:
871-
memset(&addr6, 0, sizeof(addr6));
870+
memset(&(addr6.s6_addr), 0, sizeof(addr6.s6_addr));
872871
memset(ip_strv6, 0x0, NETMASK_128);
873872

874873
strncpy(ip_strv6, buffer, sizeof(ip_strv6));
@@ -895,7 +894,7 @@ TreeNode *TreeAddIP(const char *buffer, CPTTree *tree, int type) {
895894
ip_strv6[pos] = '\0';
896895
}
897896

898-
ret = inet_pton(AF_INET6, ip_strv6, &addr6);
897+
ret = inet_pton(AF_INET6, ip_strv6, &(addr6.s6_addr));
899898

900899
if (ret <= 0)
901900
{
@@ -904,7 +903,7 @@ TreeNode *TreeAddIP(const char *buffer, CPTTree *tree, int type) {
904903

905904
tree->count++;
906905

907-
return CPTAddElement((unsigned char *)&addr6.s6_addr, NETMASK_128, tree, netmask_v6);
906+
return CPTAddElement((unsigned char *)&(addr6.s6_addr), NETMASK_128, tree, netmask_v6);
908907
default:
909908
return NULL;
910909
}
@@ -933,25 +932,25 @@ int tree_contains_ip(TreeRoot *rtree,
933932
}
934933

935934
if (strchr(value, ':') == NULL) {
936-
if (inet_pton(AF_INET, value, &in) <= 0) {
935+
if (inet_pton(AF_INET, value, &(in.s_addr)) <= 0) {
937936
//*error_msg = apr_psprintf(mp, "IPmatch: bad IPv4 " \
938937
// "specification \"%s\".", value);
939938
return -1;
940939
}
941940

942-
if (CPTIpMatch((unsigned char *)&in.s_addr, rtree->ipv4_tree,
941+
if (CPTIpMatch((unsigned char *)&(in.s_addr), rtree->ipv4_tree,
943942
IPV4_TREE) != NULL) {
944943
return 1;
945944
}
946945
}
947946
else {
948-
if (inet_pton(AF_INET6, value, &in6) <= 0) {
947+
if (inet_pton(AF_INET6, value, &(in6.s6_addr)) <= 0) {
949948
//*error_msg = apr_psprintf(mp, "IPmatch: bad IPv6 " \
950949
// "specification \"%s\".", value);
951950
return -1;
952951
}
953952

954-
if (CPTIpMatch((unsigned char *)&in6.s6_addr, rtree->ipv6_tree,
953+
if (CPTIpMatch((unsigned char *)&(in6.s6_addr), rtree->ipv6_tree,
955954
IPV6_TREE) != NULL) {
956955
return 1;
957956
}

0 commit comments

Comments
 (0)