Return null for empty String in NamespacedKey.fromString

This commit is contained in:
Nassim Jahnke 2024-01-06 14:18:58 +01:00
parent bafc86226b
commit 607a4b2bdf
2 changed files with 8 additions and 3 deletions

View file

@ -90,7 +90,7 @@ public final class NamespacedKey implements net.kyori.adventure.key.Key { // Pap
this.key = key; this.key = key;
String string = toString(); String string = toString();
Preconditions.checkArgument(string.length() < 256, "NamespacedKey must be less than 256 characters", string); Preconditions.checkArgument(string.length() <= Short.MAX_VALUE, "NamespacedKey must be less than 32768 characters", string); // Paper - Fix improper length validation
} }
/** /**
@ -117,7 +117,7 @@ public final class NamespacedKey implements net.kyori.adventure.key.Key { // Pap
Preconditions.checkArgument(isValidKey(this.key), "Invalid key. Must be [a-z0-9/._-]: %s", this.key); Preconditions.checkArgument(isValidKey(this.key), "Invalid key. Must be [a-z0-9/._-]: %s", this.key);
String string = toString(); String string = toString();
Preconditions.checkArgument(string.length() < 256, "NamespacedKey must be less than 256 characters (%s)", string); Preconditions.checkArgument(string.length() <= Short.MAX_VALUE, "NamespacedKey must be less than 32768 characters", string); // Paper - Fix improper length validation
} }
@NotNull @NotNull
@ -205,7 +205,10 @@ public final class NamespacedKey implements net.kyori.adventure.key.Key { // Pap
*/ */
@Nullable @Nullable
public static NamespacedKey fromString(@NotNull String string, @Nullable Plugin defaultNamespace) { public static NamespacedKey fromString(@NotNull String string, @Nullable Plugin defaultNamespace) {
Preconditions.checkArgument(string != null && !string.isEmpty(), "Input string must not be empty or null"); // Paper - Return null for empty string, check length
Preconditions.checkArgument(string != null, "Input string must not be null");
if (string.isEmpty() || string.length() > Short.MAX_VALUE) return null;
// Paper end - Return null for empty string, check length
String[] components = string.split(":", 3); String[] components = string.split(":", 3);
if (components.length > 2) { if (components.length > 2) {

View file

@ -29,6 +29,7 @@ public class NamespacedKeyTest {
assertNull(NamespacedKey.fromString("foo:bar:bazz")); assertNull(NamespacedKey.fromString("foo:bar:bazz"));
} }
@org.junit.jupiter.api.Disabled // Paper - Fixup NamespacedKey handling
@Test @Test
public void testFromStringEmptyInput() { public void testFromStringEmptyInput() {
assertThrows(IllegalArgumentException.class, () -> NamespacedKey.fromString("")); assertThrows(IllegalArgumentException.class, () -> NamespacedKey.fromString(""));
@ -75,6 +76,7 @@ public class NamespacedKeyTest {
"loremipsumdolorsitametconsecteturadipiscingelitduisvolutpatvelitsitametmaximusscelerisquemorbiullamcorperexacconsequategestas").toString(); "loremipsumdolorsitametconsecteturadipiscingelitduisvolutpatvelitsitametmaximusscelerisquemorbiullamcorperexacconsequategestas").toString();
} }
@org.junit.jupiter.api.Disabled // Paper - Fixup NamespacedKey handling
@Test @Test
public void testAboveLength() { public void testAboveLength() {
assertThrows(IllegalArgumentException.class, () -> new NamespacedKey("loremipsumdolorsitametconsecteturadipiscingelitduisvolutpatvelitsitametmaximusscelerisquemorbiullamcorperexacconsequategestas", assertThrows(IllegalArgumentException.class, () -> new NamespacedKey("loremipsumdolorsitametconsecteturadipiscingelitduisvolutpatvelitsitametmaximusscelerisquemorbiullamcorperexacconsequategestas",