< prev index next >
src/java.base/share/classes/java/io/ObjectOutputStream.java
Print this page
rev 15365 : imported patch 8163517-Various-cleanup-in-java-io-code
*** 1048,1073 ****
}
processQueue(Caches.subclassAuditsQueue, Caches.subclassAudits);
WeakClassKey key = new WeakClassKey(cl, Caches.subclassAuditsQueue);
Boolean result = Caches.subclassAudits.get(key);
if (result == null) {
! result = Boolean.valueOf(auditSubclass(cl));
Caches.subclassAudits.putIfAbsent(key, result);
}
! if (result.booleanValue()) {
! return;
! }
sm.checkPermission(SUBCLASS_IMPLEMENTATION_PERMISSION);
}
/**
* Performs reflective checks on given subclass to verify that it doesn't
! * override security-sensitive non-final methods. Returns true if subclass
! * is "safe", false otherwise.
*/
! private static boolean auditSubclass(final Class<?> subcl) {
! Boolean result = AccessController.doPrivileged(
new PrivilegedAction<>() {
public Boolean run() {
for (Class<?> cl = subcl;
cl != ObjectOutputStream.class;
cl = cl.getSuperclass())
--- 1048,1072 ----
}
processQueue(Caches.subclassAuditsQueue, Caches.subclassAudits);
WeakClassKey key = new WeakClassKey(cl, Caches.subclassAuditsQueue);
Boolean result = Caches.subclassAudits.get(key);
if (result == null) {
! result = auditSubclass(cl);
Caches.subclassAudits.putIfAbsent(key, result);
}
! if (!result) {
sm.checkPermission(SUBCLASS_IMPLEMENTATION_PERMISSION);
}
+ }
/**
* Performs reflective checks on given subclass to verify that it doesn't
! * override security-sensitive non-final methods. Returns TRUE if subclass
! * is "safe", FALSE otherwise.
*/
! private static Boolean auditSubclass(Class<?> subcl) {
! return AccessController.doPrivileged(
new PrivilegedAction<>() {
public Boolean run() {
for (Class<?> cl = subcl;
cl != ObjectOutputStream.class;
cl = cl.getSuperclass())
*** 1086,1096 ****
}
return Boolean.TRUE;
}
}
);
- return result.booleanValue();
}
/**
* Clears internal data structures.
*/
--- 1085,1094 ----
< prev index next >