From 98de2ad302ef2740bb8c65891df12ad0ba1f511b Mon Sep 17 00:00:00 2001 From: PHJ2000 <105151063+PHJ2000@users.noreply.github.com> Date: Tue, 6 Oct 2026 00:44:33 +0900 Subject: [PATCH] Limit long-based Ethernet addresses to 48 bits --- .../com/fasterxml/uuid/EthernetAddress.java | 2 +- .../fasterxml/uuid/EthernetAddressTest.java | 24 +++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/fasterxml/uuid/EthernetAddress.java b/src/main/java/com/fasterxml/uuid/EthernetAddress.java index f3222d5..27c51e0 100644 --- a/src/main/java/com/fasterxml/uuid/EthernetAddress.java +++ b/src/main/java/com/fasterxml/uuid/EthernetAddress.java @@ -169,7 +169,7 @@ public EthernetAddress(byte [] addr) * bytes. */ public EthernetAddress(long addr) { - _address = addr; + _address = addr & 0x0000ffffffffffffL; } /** diff --git a/src/test/java/com/fasterxml/uuid/EthernetAddressTest.java b/src/test/java/com/fasterxml/uuid/EthernetAddressTest.java index f3b4629..9921c92 100644 --- a/src/test/java/com/fasterxml/uuid/EthernetAddressTest.java +++ b/src/test/java/com/fasterxml/uuid/EthernetAddressTest.java @@ -1425,4 +1425,28 @@ private void assertEthernetAddressArraysAreNotEqual(byte[] array1, } fail("Array1 and Array2 matched"); } + + @Test + public void longConstructorUsesOnlyLowestSixBytes() { + long expected = 0x0123456789abL; + EthernetAddress canonical = new EthernetAddress(expected); + for (long highBits : new long[] { 0x0001000000000000L, Long.MIN_VALUE, 0xffff000000000000L }) { + EthernetAddress address = new EthernetAddress(highBits | expected); + assertEquals(expected, address.toLong()); + assertEquals(canonical, address); + assertEquals(canonical.hashCode(), address.hashCode()); + assertEquals(0, canonical.compareTo(address)); + assertEquals(canonical.toString(), address.toString()); + assertArrayEquals(canonical.toByteArray(), address.toByteArray()); + } + } + + @Test + public void longFactoryRoundTripsNegativeInput() { + EthernetAddress address = EthernetAddress.valueOf(-1L); + assertEquals(0xffffffffffffL, address.toLong()); + assertEquals(address, new EthernetAddress(address.toString())); + assertEquals(address, new EthernetAddress(address.toByteArray())); + } + }