This is an automated email from the ASF dual-hosted git repository.

yuqi4733 pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/gravitino.git


The following commit(s) were added to refs/heads/main by this push:
     new 779e8654c0 [#8202] fix(cli): Fix NPE in TableFormat.java when a user 
has no roles (#8637)
779e8654c0 is described below

commit 779e8654c0782f108c01580fba970b9d1f192fcc
Author: MaAng <[email protected]>
AuthorDate: Thu Sep 25 11:51:35 2025 +0800

    [#8202] fix(cli): Fix NPE in TableFormat.java when a user has no roles 
(#8637)
    
    ### What changes were proposed in this pull request?
    
    Return a new ArrayList when user doesn't have any roles to prevent NPE.
    
    ### Why are the changes needed?
    
    Prevent NPE when user doesn't have any roles.
    
    Fix: #8202
    
    ### Does this PR introduce _any_ user-facing change?
    
    No
    ### How was this patch tested?
    
    Passed UT.
---
 .../org/apache/gravitino/cli/outputs/TableFormat.java  |  5 ++++-
 .../apache/gravitino/cli/output/TestTableFormat.java   | 18 ++++++++++++++++++
 2 files changed, 22 insertions(+), 1 deletion(-)

diff --git 
a/clients/cli/src/main/java/org/apache/gravitino/cli/outputs/TableFormat.java 
b/clients/cli/src/main/java/org/apache/gravitino/cli/outputs/TableFormat.java
index 6ac3ff575a..2eebb6e17e 100644
--- 
a/clients/cli/src/main/java/org/apache/gravitino/cli/outputs/TableFormat.java
+++ 
b/clients/cli/src/main/java/org/apache/gravitino/cli/outputs/TableFormat.java
@@ -42,6 +42,7 @@ import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.io.OutputStreamWriter;
 import java.nio.charset.StandardCharsets;
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 import java.util.Map;
@@ -845,7 +846,9 @@ public abstract class TableFormat<T> extends 
BaseOutputFormat<T> {
       Column columnRoles = new Column(context, "roles");
 
       columnName.addCell(user.name());
-      columnRoles.addCell(Command.COMMA_JOINER.join(user.roles()));
+
+      List<String> roleList = user.roles() == null ? new ArrayList<>() : 
user.roles();
+      columnRoles.addCell(Command.COMMA_JOINER.join(roleList));
 
       return getTableFormat(columnName, columnRoles);
     }
diff --git 
a/clients/cli/src/test/java/org/apache/gravitino/cli/output/TestTableFormat.java
 
b/clients/cli/src/test/java/org/apache/gravitino/cli/output/TestTableFormat.java
index 54140a1d0d..48fe9e580e 100644
--- 
a/clients/cli/src/test/java/org/apache/gravitino/cli/output/TestTableFormat.java
+++ 
b/clients/cli/src/test/java/org/apache/gravitino/cli/output/TestTableFormat.java
@@ -950,4 +950,22 @@ public class TestTableFormat {
 
     Assertions.assertEquals(expected.trim(), outputString.trim());
   }
+
+  @Test
+  void testUserDetailsWithNullRoles() {
+    CommandContext mockContext = TestCliUtil.getMockContext();
+    User mockUser = mock(User.class);
+    when(mockUser.name()).thenReturn("user1");
+    when(mockUser.roles()).thenReturn(null);
+
+    TableFormat.output(mockUser, mockContext);
+    String output = new String(outContent.toByteArray(), 
StandardCharsets.UTF_8).trim();
+    Assertions.assertEquals(
+        "+-------+-------+\n"
+            + "| Name  | Roles |\n"
+            + "+-------+-------+\n"
+            + "| user1 |       |\n"
+            + "+-------+-------+",
+        output);
+  }
 }

Reply via email to