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);