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

jshao 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 ec1da3155f [#7516] fix: Ensure that converting a string to a namespace 
validates all input (#7535)
ec1da3155f is described below

commit ec1da3155ff1bda0629c637611797bcc2aa06c99
Author: Jackeyzhe <[email protected]>
AuthorDate: Fri Jul 4 11:26:31 2025 +0800

    [#7516] fix: Ensure that converting a string to a namespace validates all 
input (#7535)
    
    ### 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]>
---
 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