This is an automated email from the ASF dual-hosted git repository.
jinrongtong pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/rocketmq.git
The following commit(s) were added to refs/heads/develop by this push:
new a68a5bfd8c [ISSUE #9809] Fix NPE in getAcl when subject is null (#9810)
a68a5bfd8c is described below
commit a68a5bfd8c18068c08dcb6148c32d7b28de54299
Author: majialong <[email protected]>
AuthorDate: Thu Nov 20 11:50:50 2025 +0800
[ISSUE #9809] Fix NPE in getAcl when subject is null (#9810)
---
.../manager/AuthorizationMetadataManagerImpl.java | 31 +++++++++++++---------
.../manager/AuthorizationMetadataManagerTest.java | 15 +++++++++++
2 files changed, 34 insertions(+), 12 deletions(-)
diff --git
a/auth/src/main/java/org/apache/rocketmq/auth/authorization/manager/AuthorizationMetadataManagerImpl.java
b/auth/src/main/java/org/apache/rocketmq/auth/authorization/manager/AuthorizationMetadataManagerImpl.java
index dd6b63679d..5a8dede18e 100644
---
a/auth/src/main/java/org/apache/rocketmq/auth/authorization/manager/AuthorizationMetadataManagerImpl.java
+++
b/auth/src/main/java/org/apache/rocketmq/auth/authorization/manager/AuthorizationMetadataManagerImpl.java
@@ -176,19 +176,26 @@ public class AuthorizationMetadataManagerImpl implements
AuthorizationMetadataMa
@Override
public CompletableFuture<Acl> getAcl(Subject subject) {
- CompletableFuture<? extends Subject> subjectFuture;
- if (subject.isSubject(SubjectType.USER)) {
- User user = (User) subject;
- subjectFuture =
this.getAuthenticationMetadataProvider().getUser(user.getUsername());
- } else {
- subjectFuture = CompletableFuture.completedFuture(subject);
- }
- return subjectFuture.thenCompose(sub -> {
- if (sub == null) {
- throw new AuthorizationException("The subject is not exist.");
+ try {
+ if (subject == null) {
+ throw new AuthorizationException("The subject is null.");
}
- return this.getAuthorizationMetadataProvider().getAcl(subject);
- });
+ CompletableFuture<? extends Subject> subjectFuture;
+ if (subject.isSubject(SubjectType.USER)) {
+ User user = (User) subject;
+ subjectFuture =
this.getAuthenticationMetadataProvider().getUser(user.getUsername());
+ } else {
+ subjectFuture = CompletableFuture.completedFuture(subject);
+ }
+ return subjectFuture.thenCompose(sub -> {
+ if (sub == null) {
+ throw new AuthorizationException("The subject is not
exist.");
+ }
+ return this.getAuthorizationMetadataProvider().getAcl(sub);
+ });
+ } catch (Exception e) {
+ return this.handleException(e);
+ }
}
@Override
diff --git
a/auth/src/test/java/org/apache/rocketmq/auth/authorization/manager/AuthorizationMetadataManagerTest.java
b/auth/src/test/java/org/apache/rocketmq/auth/authorization/manager/AuthorizationMetadataManagerTest.java
index b6bcfa7488..72504f1cb3 100644
---
a/auth/src/test/java/org/apache/rocketmq/auth/authorization/manager/AuthorizationMetadataManagerTest.java
+++
b/auth/src/test/java/org/apache/rocketmq/auth/authorization/manager/AuthorizationMetadataManagerTest.java
@@ -203,6 +203,21 @@ public class AuthorizationMetadataManagerTest {
});
}
+ @Test
+ public void testGetAclWithNullSubject() {
+ if (MixAll.isMac()) {
+ return;
+ }
+ AuthorizationException authorizationException =
Assert.assertThrows(AuthorizationException.class, () -> {
+ try {
+ this.authorizationMetadataManager.getAcl(null).join();
+ } catch (Exception e) {
+ AuthTestHelper.handleException(e);
+ }
+ });
+ Assert.assertEquals("The subject is null.",
authorizationException.getMessage());
+ }
+
@Test
public void listAcl() {
if (MixAll.isMac()) {