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()) {

Reply via email to