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);
+ }
}