-
Bug
-
Resolution: Done
-
Undefined
-
None
-
None
It appears that there are corner cases where resourceNames in com.github.streamshub.console.api.security.ConsolePermission can be uninitialized or initialized to null, resulting in a long stacktrace / 5001 error with the following cause:
2025-03-17T16:11:39.112078576Z Caused by: java.util.concurrent.ExecutionException: java.lang.NullPointerException: Cannot invoke "java.util.Collection.isEmpty()" because "this.resourceNames" is null 2025-03-17T16:11:39.112078576Z at java.base/java.util.concurrent.CompletableFuture.reportGet(CompletableFuture.java:396) 2025-03-17T16:11:39.112078576Z at java.base/java.util.concurrent.CompletableFuture.get(CompletableFuture.java:2073) 2025-03-17T16:11:39.112078576Z at io.smallrye.context.CompletableFutureWrapper.get(CompletableFutureWrapper.java:152) 2025-03-17T16:11:39.112078576Z at com.github.streamshub.console.api.security.AuthorizationInterceptor.authorize(AuthorizationInterceptor.java:65) 2025-03-17T16:11:39.112078576Z at com.github.streamshub.console.api.security.AuthorizationInterceptor_Bean.intercept(Unknown Source) 2025-03-17T16:11:39.112078576Z at io.quarkus.arc.impl.InterceptorInvocation.invoke(InterceptorInvocation.java:42) 2025-03-17T16:11:39.112078576Z at io.quarkus.arc.impl.AroundInvokeInvocationContext.perform(AroundInvokeInvocationContext.java:30) 2025-03-17T16:11:39.112078576Z at io.quarkus.arc.impl.InvocationContexts.performAroundInvoke(InvocationContexts.java:27) 2025-03-17T16:11:39.112078576Z ... 222 more 2025-03-17T16:11:39.112078576Z Caused by: java.lang.NullPointerException: Cannot invoke "java.util.Collection.isEmpty()" because "this.resourceNames" is null 2025-03-17T16:11:39.112078576Z at com.github.streamshub.console.api.security.ConsolePermission.resourceDenied(ConsolePermission.java:102) 2025-03-17T16:11:39.112078576Z at com.github.streamshub.console.api.security.ConsolePermission.implies(ConsolePermission.java:73) 2025-03-17T16:11:39.112078576Z at com.github.streamshub.console.api.security.ConsolePermission.implies(ConsolePermission.java:66) 2025-03-17T16:11:39.112078576Z at com.github.streamshub.console.api.security.ConsoleAuthenticationMechanism.lambda$addRoleChecker$13(ConsoleAuthenticationMechanism.java:368) 2025-03-17T16:11:39.112078576Z at java.base/java.util.stream.MatchOps$1MatchSink.accept(MatchOps.java:90) 2025-03-17T16:11:39.112078576Z at java.base/java.util.AbstractList$RandomAccessSpliterator.tryAdvance(AbstractList.java:706) 2025-03-17T16:11:39.112078576Z at java.base/java.util.stream.ReferencePipeline.forEachWithCancel(ReferencePipeline.java:129) 2025-03-17T16:11:39.112078576Z at java.base/java.util.stream.AbstractPipeline.copyIntoWithCancel(AbstractPipeline.java:527) 2025-03-17T16:11:39.112078576Z at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:513) 2025-03-17T16:11:39.112251001Z at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) 2025-03-17T16:11:39.112251001Z at java.base/java.util.stream.MatchOps$MatchOp.evaluateSequential(MatchOps.java:230) 2025-03-17T16:11:39.112251001Z at java.base/java.util.stream.MatchOps$MatchOp.evaluateSequential(MatchOps.java:196) 2025-03-17T16:11:39.112251001Z at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) 2025-03-17T16:11:39.112251001Z at java.base/java.util.stream.ReferencePipeline.anyMatch(ReferencePipeline.java:632) 2025-03-17T16:11:39.112251001Z at com.github.streamshub.console.api.security.ConsoleAuthenticationMechanism.lambda$addRoleChecker$14(ConsoleAuthenticationMechanism.java:368) 2025-03-17T16:11:39.112251001Z at io.quarkus.security.runtime.QuarkusSecurityIdentity.checkPermission(QuarkusSecurityIdentity.java:88) 2025-03-17T16:11:39.112251001Z at io.quarkus.security.runtime.SecurityIdentityProxy$1.apply(SecurityIdentityProxy.java:68) 2025-03-17T16:11:39.112251001Z at io.quarkus.security.runtime.SecurityIdentityProxy$1.apply(SecurityIdentityProxy.java:65) 2025-03-17T16:11:39.112251001Z at io.smallrye.context.impl.wrappers.SlowContextualFunction.apply(SlowContextualFunction.java:21) 2025-03-17T16:11:39.112251001Z at io.smallrye.mutiny.operators.uni.UniOnItemTransformToUni$UniOnItemTransformToUniProcessor.performInnerSubscription(UniOnItemTransformToUni.java:68) 2025-03-17T16:11:39.112251001Z at io.smallrye.mutiny.operators.uni.UniOnItemTransformToUni$UniOnItemTransformToUniProcessor.onItem(UniOnItemTransformToUni.java:57) 2025-03-17T16:11:39.112251001Z at io.smallrye.mutiny.operators.uni.builders.UniCreateFromKnownItem$KnownItemSubscription.forward(UniCreateFromKnownItem.java:38) 2025-03-17T16:11:39.112251001Z at io.smallrye.mutiny.operators.uni.builders.UniCreateFromKnownItem.subscribe(UniCreateFromKnownItem.java:23) 2025-03-17T16:11:39.112251001Z at io.smallrye.mutiny.operators.AbstractUni.subscribe(AbstractUni.java:36) 2025-03-17T16:11:39.112251001Z at io.smallrye.mutiny.operators.uni.UniOnItemTransformToUni.subscribe(UniOnItemTransformToUni.java:25) 2025-03-17T16:11:39.112251001Z at io.smallrye.mutiny.operators.AbstractUni.subscribe(AbstractUni.java:36) 2025-03-17T16:11:39.112251001Z at io.smallrye.mutiny.groups.UniSubscribe.withSubscriber(UniSubscribe.java:51) 2025-03-17T16:11:39.112251001Z at io.smallrye.mutiny.groups.UniSubscribe.with(UniSubscribe.java:110) 2025-03-17T16:11:39.112251001Z at io.smallrye.mutiny.operators.uni.UniSubscribeToCompletionStage.subscribe(UniSubscribeToCompletionStage.java:30) 2025-03-17T16:11:39.112251001Z at io.smallrye.mutiny.groups.UniSubscribe.asCompletionStage(UniSubscribe.java:174) 2025-03-17T16:11:39.112251001Z at io.smallrye.mutiny.groups.UniSubscribe.asCompletionStage(UniSubscribe.java:162) 2025-03-17T16:11:39.112251001Z at io.smallrye.mutiny.Uni.subscribeAsCompletionStage(Uni.java:141) 2025-03-17T16:11:39.112251001Z at com.github.streamshub.console.api.security.AuthorizationInterceptor.authorize(AuthorizationInterceptor.java:64) 2025-03-17T16:11:39.112251001Z ... 226 more