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

jshao pushed a commit to branch branch-0.9
in repository https://gitbox.apache.org/repos/asf/gravitino.git


The following commit(s) were added to refs/heads/branch-0.9 by this push:
     new a9d0d1dbd7 [#7516] fix: Ensure that converting a string to a namespace 
validates all input (#7569)
a9d0d1dbd7 is described below

commit a9d0d1dbd7d913f401a455da6ecd127b7e6e16c2
Author: github-actions[bot] 
<41898282+github-actions[bot]@users.noreply.github.com>
AuthorDate: Fri Jul 4 12:38:11 2025 +0800

    [#7516] fix: Ensure that converting a string to a namespace validates all 
input (#7569)
    
    ### What changes were proposed in this pull request?
    
    Valid input string for fromString in Namespace.java
    
    ### Why are the changes needed?
    Ensure that converting a string to a namespace validates all input
    
    Fix: #7516
    
    ### Does this PR introduce _any_ user-facing change?
    
    No
    
    ### How was this patch tested?
    
    (Please test your changes, and provide instructions on how to test it:
    add these tests
    ``` java
      @Test
      public void testFromString() {
        Assertions.assertEquals(Namespace.empty(), Namespace.fromString(""));
        Assertions.assertEquals(Namespace.of("a", "b"), 
Namespace.fromString("a.b"));
        Assertions.assertEquals(Namespace.of("a"), Namespace.fromString("a"));
      }
    
      @Test
      public void testFromStringInvalidArgs() {
        Assertions.assertThrows(IllegalArgumentException.class, () -> 
Namespace.fromString(null));
        Assertions.assertThrows(IllegalArgumentException.class, () -> 
Namespace.fromString(".a"));
        Assertions.assertThrows(IllegalArgumentException.class, () -> 
Namespace.fromString("a."));
        Assertions.assertThrows(IllegalArgumentException.class, () -> 
Namespace.fromString("a..b"));
      }
    ```
    
    Co-authored-by: Jackeyzhe <[email protected]>
    Co-authored-by: jackeyzhe <[email protected]>
---
 api/src/main/java/org/apache/gravitino/Namespace.java     | 10 ++++++++--
 api/src/test/java/org/apache/gravitino/TestNamespace.java | 15 +++++++++++++++
 2 files changed, 23 insertions(+), 2 deletions(-)

diff --git a/api/src/main/java/org/apache/gravitino/Namespace.java 
b/api/src/main/java/org/apache/gravitino/Namespace.java
index bdd48a2efb..85825b7477 100644
--- a/api/src/main/java/org/apache/gravitino/Namespace.java
+++ b/api/src/main/java/org/apache/gravitino/Namespace.java
@@ -19,9 +19,11 @@
 package org.apache.gravitino;
 
 import com.google.common.base.Joiner;
+import com.google.common.base.Preconditions;
 import com.google.errorprone.annotations.FormatMethod;
 import com.google.errorprone.annotations.FormatString;
 import java.util.Arrays;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.gravitino.exceptions.IllegalNamespaceException;
 
 /**
@@ -72,8 +74,12 @@ public class Namespace {
    * @return A namespace with the given levels
    */
   public static Namespace fromString(String namespace) {
-    // todo: escape the dots in the levels if needed
-    return new Namespace(namespace.split("\\."));
+    Preconditions.checkArgument(namespace != null, "Cannot create a namespace 
with null input");
+    Preconditions.checkArgument(!namespace.endsWith("."), "Cannot create a 
namespace end with dot");
+    if (StringUtils.isBlank(namespace)) {
+      return empty();
+    }
+    return Namespace.of(namespace.split("\\."));
   }
 
   private Namespace(String[] levels) {
diff --git a/api/src/test/java/org/apache/gravitino/TestNamespace.java 
b/api/src/test/java/org/apache/gravitino/TestNamespace.java
index f73d35cbc4..dddc7a16a9 100644
--- a/api/src/test/java/org/apache/gravitino/TestNamespace.java
+++ b/api/src/test/java/org/apache/gravitino/TestNamespace.java
@@ -46,4 +46,19 @@ public class TestNamespace {
     Assertions.assertThrows(IllegalArgumentException.class, () -> 
Namespace.of("a", null, "c"));
     Assertions.assertThrows(IllegalArgumentException.class, () -> 
Namespace.of("a", "", "c"));
   }
+
+  @Test
+  public void testFromString() {
+    Assertions.assertEquals(Namespace.empty(), Namespace.fromString(""));
+    Assertions.assertEquals(Namespace.of("a", "b"), 
Namespace.fromString("a.b"));
+    Assertions.assertEquals(Namespace.of("a"), Namespace.fromString("a"));
+  }
+
+  @Test
+  public void testFromStringInvalidArgs() {
+    Assertions.assertThrows(IllegalArgumentException.class, () -> 
Namespace.fromString(null));
+    Assertions.assertThrows(IllegalArgumentException.class, () -> 
Namespace.fromString(".a"));
+    Assertions.assertThrows(IllegalArgumentException.class, () -> 
Namespace.fromString("a."));
+    Assertions.assertThrows(IllegalArgumentException.class, () -> 
Namespace.fromString("a..b"));
+  }
 }

Reply via email to