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