From 326e6eab59f5f0a281f1b3a5f81a767bc1dfe00b Mon Sep 17 00:00:00 2001 From: Fatih Aktas Date: Tue, 14 Nov 2023 14:21:42 -0500 Subject: [PATCH] Add ipv4 handling back --- src/main/java/com/maxmind/db/Networks.java | 2 +- src/main/java/com/maxmind/db/Reader.java | 11 +++++++++-- src/test/java/com/maxmind/db/ReaderTest.java | 13 ++++++------- 3 files changed, 16 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/maxmind/db/Networks.java b/src/main/java/com/maxmind/db/Networks.java index a7e6a116..8a454312 100644 --- a/src/main/java/com/maxmind/db/Networks.java +++ b/src/main/java/com/maxmind/db/Networks.java @@ -84,7 +84,7 @@ public DatabaseRecord next() { // We do this because uses of includeAliasedNetworks will get IPv4 networks // from the ::FFFF:0:0/96. We want to return the IPv4 form of the address // in that case. - if (isInIpv4Subtree(ip)) { + if (!this.includeAliasedNetworks && isInIpv4Subtree(ip)) { ip = Arrays.copyOfRange(ip, 12, ip.length); prefixLength -= 96; } diff --git a/src/main/java/com/maxmind/db/Reader.java b/src/main/java/com/maxmind/db/Reader.java index 3fba1a4e..c4b53e85 100644 --- a/src/main/java/com/maxmind/db/Reader.java +++ b/src/main/java/com/maxmind/db/Reader.java @@ -307,8 +307,15 @@ public Networks networksWithin( int prefixLength = network.getPrefixLength(); if (this.metadata.getIpVersion() == 6 && ipBytes.length == IPV4_LEN) { - ipBytes = new byte[]{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - ipBytes[0], ipBytes[1], ipBytes[2], ipBytes[3] }; + if (includeAliasedNetworks) { + // Convert it to the IP address (in 16-byte from) of the IPv4 address. + ipBytes = new byte[]{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -1, -1, // -1 is for 0xff. + ipBytes[0], ipBytes[1], ipBytes[2], ipBytes[3]}; + } else { + ipBytes = new byte[]{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + ipBytes[0], ipBytes[1], ipBytes[2], ipBytes[3] }; + } prefixLength += 96; } diff --git a/src/test/java/com/maxmind/db/ReaderTest.java b/src/test/java/com/maxmind/db/ReaderTest.java index 1bdc0329..b7998496 100644 --- a/src/test/java/com/maxmind/db/ReaderTest.java +++ b/src/test/java/com/maxmind/db/ReaderTest.java @@ -258,13 +258,12 @@ public networkTest(String network, int prefix,String database, String[] expecte 0, "mixed", new String[]{ - // ::/96 - "1.1.1.1/32", - "1.1.1.2/31", - "1.1.1.4/30", - "1.1.1.8/29", - "1.1.1.16/28", - "1.1.1.32/32", + "0:0:0:0:0:0:101:101/128", + "0:0:0:0:0:0:101:102/127", + "0:0:0:0:0:0:101:104/126", + "0:0:0:0:0:0:101:108/125", + "0:0:0:0:0:0:101:110/124", + "0:0:0:0:0:0:101:120/128", "0:0:0:0:0:1:ffff:ffff/128", "0:0:0:0:0:2:0:0/122", "0:0:0:0:0:2:0:40/124",