Skip to content

Commit 3799cbe

Browse files
authored
Use Adventure properties default override provider to set a global flattener nesting limit (#13156)
1 parent 7b9a472 commit 3799cbe

File tree

3 files changed

+21
-1
lines changed

3 files changed

+21
-1
lines changed

paper-server/src/main/java/io/papermc/paper/adventure/PaperAdventure.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,6 @@
7676
public final class PaperAdventure {
7777
private static final Pattern LOCALIZATION_PATTERN = Pattern.compile("%(?:(\\d+)\\$)?s");
7878
public static final ComponentFlattener FLATTENER = ComponentFlattener.basic().toBuilder()
79-
.nestingLimit(30) // todo: should this be configurable? a system property or config value?
8079
.complexMapper(TranslatableComponent.class, (translatable, consumer) -> {
8180
final Language language = Language.getInstance();
8281
final @Nullable String fallback = translatable.fallback();
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package io.papermc.paper.adventure.providers;
2+
3+
import net.kyori.adventure.internal.properties.AdventureProperties;
4+
import org.jetbrains.annotations.NotNull;
5+
import org.jetbrains.annotations.Nullable;
6+
7+
@SuppressWarnings("UnstableApiUsage") // Permitted provider.
8+
public class AdventurePropertiesDefaultOverrideProviderImpl implements AdventureProperties.DefaultOverrideProvider {
9+
@SuppressWarnings("unchecked") // We do check.
10+
@Override
11+
public <T> @Nullable T overrideDefault(final AdventureProperties.@NotNull Property<T> property, @Nullable final T existingDefault) {
12+
if (property == AdventureProperties.DEFAULT_FLATTENER_NESTING_LIMIT) {
13+
// Large nesting limits can cause stack overflows with overly complicated components.
14+
// Limiting to 30 is a reasonable default.
15+
return (T) Integer.valueOf(30);
16+
} else {
17+
return null;
18+
}
19+
}
20+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
io.papermc.paper.adventure.providers.AdventurePropertiesDefaultOverrideProviderImpl

0 commit comments

Comments
 (0)