From bdda0846519e3c8dfbe0fbd4527354151228a506 Mon Sep 17 00:00:00 2001 From: moneromooo-monero Date: Mon, 13 May 2019 15:42:05 +0000 Subject: [PATCH] epee: fix local/loopback checks on big endian IPv4 addresses are kept in network byte order in memory --- contrib/epee/include/net/local_ip.h | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/contrib/epee/include/net/local_ip.h b/contrib/epee/include/net/local_ip.h index ce74e1cd3..246cf6ad8 100644 --- a/contrib/epee/include/net/local_ip.h +++ b/contrib/epee/include/net/local_ip.h @@ -30,6 +30,11 @@ #include #include #include +#include "int-util.h" + +// IP addresses are kept in network byte order +// Masks below are little endian +// -> convert from network byte order to host byte order before comparing namespace epee { @@ -62,6 +67,7 @@ namespace epee inline bool is_ip_local(uint32_t ip) { + ip = SWAP32LE(ip); /* local ip area 10.0.0.0 — 10.255.255.255 @@ -85,6 +91,7 @@ namespace epee inline bool is_ip_loopback(uint32_t ip) { + ip = SWAP32LE(ip); if( (ip | 0xffffff00) == 0xffffff7f) return true; //MAKE_IP