diff --git a/lucene/CHANGES.txt b/lucene/CHANGES.txt index 42a6e8073576..c1b1ab7859c2 100644 --- a/lucene/CHANGES.txt +++ b/lucene/CHANGES.txt @@ -162,6 +162,9 @@ Optimizations Bug Fixes --------------------- +* Fix missing null check in RamUsageEstimator.sizeOf(Accountable) to be consistent + with sizeOf(String) and sizeOf(Accountable[]). (Tim Grein) + * GITHUB#14049: Randomize KNN codec params in RandomCodec. Fixes scalar quantization div-by-zero when all values are identical. (Mike Sokolov) diff --git a/lucene/core/src/java/org/apache/lucene/util/RamUsageEstimator.java b/lucene/core/src/java/org/apache/lucene/util/RamUsageEstimator.java index 08b3cd1fb3e1..6fc276472ce5 100644 --- a/lucene/core/src/java/org/apache/lucene/util/RamUsageEstimator.java +++ b/lucene/core/src/java/org/apache/lucene/util/RamUsageEstimator.java @@ -428,6 +428,9 @@ private static long sizeOfObject(Object o, int depth, long defSize) { * Accountable#ramBytesUsed()} method. */ public static long sizeOf(Accountable accountable) { + if (accountable == null) { + return 0; + } return accountable.ramBytesUsed(); } diff --git a/lucene/core/src/test/org/apache/lucene/util/TestRamUsageEstimator.java b/lucene/core/src/test/org/apache/lucene/util/TestRamUsageEstimator.java index 8e0bd13507ea..5ffb7e9c3e01 100644 --- a/lucene/core/src/test/org/apache/lucene/util/TestRamUsageEstimator.java +++ b/lucene/core/src/test/org/apache/lucene/util/TestRamUsageEstimator.java @@ -150,6 +150,11 @@ public void testMap() { assertEquals((double) actual, (double) estimated, (double) actual * errorFactor); } + public void testAccountable() { + assertEquals(0L, RamUsageEstimator.sizeOf((Accountable) null)); + assertEquals(1L, RamUsageEstimator.sizeOf(new DummyAccountable())); + } + public void testCollection() { List list = new ArrayList<>(); list.add(1234L); @@ -252,4 +257,11 @@ private static class HolderSubclass extends Holder { private static class HolderSubclass2 extends Holder { // empty, only inherits all fields -> size should be identical to superclass } + + private static class DummyAccountable implements Accountable { + @Override + public long ramBytesUsed() { + return 1L; + } + } }