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