You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@karaf.apache.org by "Oliver Fürniß (Jira)" <ji...@apache.org> on 2022/03/11 06:26:00 UTC
[jira] [Created] (KARAF-7404) NPE in JaasHelper
Oliver Fürniß created KARAF-7404:
------------------------------------
Summary: NPE in JaasHelper
Key: KARAF-7404
URL: https://issues.apache.org/jira/browse/KARAF-7404
Project: Karaf
Issue Type: Bug
Components: karaf
Affects Versions: 4.3.6
Reporter: Oliver Fürniß
Not sure yet, why or when this happens, but I'm quite sure I would get a better Exception later when the NPE is not thrown. ;-)
Stephen Kitt <sk...@redhat.com> introduced on 05/21/2019 the NullPointerException code due to a refactoring in the class `org.apache.karaf.util.jaas.JaasHelper`.
The code before 05/21/2019 handles the case when assignedDomains is null correct. It did not enter the for-loop at all to access assignedDomains when it is null.
{code:java}
public ProtectionDomain[] combine(ProtectionDomain[] currentDomains,
ProtectionDomain[] assignedDomains) {
int cLen = (currentDomains == null ? 0 : currentDomains.length);
int aLen = (assignedDomains == null ? 0 : assignedDomains.length);
ProtectionDomain[] newDomains = new ProtectionDomain[cLen + aLen];
Principal[] principals = subject.getPrincipals().toArray(new Principal[0]);
for (int i = 0; i < cLen; i++) {
newDomains[i] = new DelegatingProtectionDomain(currentDomains[i], principals);
}
for (int i = 0; i < aLen; i++) {
newDomains[cLen + i] = assignedDomains[i];
}
newDomains = optimize(newDomains);
return newDomains;
} {code}
The code after 05/21/2019, which introduced the System.arraycopy, throws the NPE when assignedDomains is null.
{code:java}
public ProtectionDomain[] combine(ProtectionDomain[] currentDomains,
ProtectionDomain[] assignedDomains) {
int cLen = (currentDomains == null ? 0 : currentDomains.length);
int aLen = (assignedDomains == null ? 0 : assignedDomains.length);
ProtectionDomain[] newDomains = new ProtectionDomain[cLen + aLen];
Principal[] principals = subject.getPrincipals().toArray(new Principal[0]);
for (int i = 0; i < cLen; i++) {
newDomains[i] = new DelegatingProtectionDomain(currentDomains[i], principals);
}
System.arraycopy(assignedDomains, 0, newDomains, cLen, aLen);
return optimize(newDomains);
} {code}
The thrown exception
{code:java}
Caused by: java.lang.NullPointerException
at java.lang.System.arraycopy(Native Method) ~[?:?]
at org.apache.karaf.util.jaas.JaasHelper$OsgiSubjectDomainCombiner.combine(JaasHelper.java:137) ~[?:?]
at java.security.AccessControlContext.<init>(AccessControlContext.java:237) ~[?:?]
at java.security.AccessController.createWrapper(AccessController.java:599) ~[?:?]
at java.security.AccessController.doPrivilegedWithCombiner(AccessController.java:795) ~[?:?]
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1509) ~[?:?]
at sun.net.www.protocol.http.HttpURLConnection.getHeaderFields(HttpURLConnection.java:3122) ~[?:?]
at org.apache.cxf.transport.http.Headers.readFromConnection(Headers.java:281) ~[?:?]
at org.apache.cxf.transport.http.URLConnectionHTTPConduit$URLConnectionWrappedOutputStream.updateResponseHeaders(URLConnectionHTTPConduit.java:328) ~[?:?]
at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponseInternal(HTTPConduit.java:1632) ~[?:?]
at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream$1.run(HTTPConduit.java:1192) ~[?:?]
at org.apache.cxf.workqueue.AutomaticWorkQueueImpl$3.run(AutomaticWorkQueueImpl.java:413) ~[?:?]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[?:?]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[?:?]
at org.apache.cxf.workqueue.AutomaticWorkQueueImpl$AWQThreadFactory$1.run(AutomaticWorkQueueImpl.java:346) ~[?:?]
... 1 more
{code}
--
This message was sent by Atlassian Jira
(v8.20.1#820001)