You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by rm...@apache.org on 2015/12/06 19:04:10 UTC
svn commit: r1718195 - in /lucene/dev/trunk/lucene: CHANGES.txt
core/src/java/org/apache/lucene/util/RamUsageEstimator.java
Author: rmuir
Date: Sun Dec 6 18:04:09 2015
New Revision: 1718195
URL: http://svn.apache.org/viewvc?rev=1718195&view=rev
Log:
LUCENE-6923: Fix RamUsageEstimator to access private fields
Modified:
lucene/dev/trunk/lucene/CHANGES.txt
lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/util/RamUsageEstimator.java
Modified: lucene/dev/trunk/lucene/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/CHANGES.txt?rev=1718195&r1=1718194&r2=1718195&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/CHANGES.txt (original)
+++ lucene/dev/trunk/lucene/CHANGES.txt Sun Dec 6 18:04:09 2015
@@ -141,6 +141,9 @@ Other
* LUCENE-6921: Fix SPIClassIterator#isParentClassLoader to don't
require extra permissions. (Uwe Schindler)
+* LUCENE-6923: Fix RamUsageEstimator to access private fields inside
+ AccessController block for computing size. (Robert Muir)
+
======================= Lucene 5.4.0 =======================
New Features
Modified: lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/util/RamUsageEstimator.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/util/RamUsageEstimator.java?rev=1718195&r1=1718194&r2=1718195&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/util/RamUsageEstimator.java (original)
+++ lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/util/RamUsageEstimator.java Sun Dec 6 18:04:09 2015
@@ -21,6 +21,8 @@ import java.lang.reflect.Array;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
+import java.security.AccessController;
+import java.security.PrivilegedAction;
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
import java.util.IdentityHashMap;
@@ -290,7 +292,13 @@ public final class RamUsageEstimator {
// Walk type hierarchy
for (;clazz != null; clazz = clazz.getSuperclass()) {
- final Field[] fields = clazz.getDeclaredFields();
+ final Class<?> target = clazz;
+ final Field[] fields = AccessController.doPrivileged(new PrivilegedAction<Field[]>() {
+ @Override
+ public Field[] run() {
+ return target.getDeclaredFields();
+ }
+ });
for (Field f : fields) {
if (!Modifier.isStatic(f.getModifiers())) {
size = adjustForField(size, f);