#3859: Do not add control characters to the ClickEvent with OPEN_URL action

This commit is contained in:
Valentine
2025-07-07 20:50:01 +10:00
committed by md_5
parent 7fcc62067b
commit 131125c7d2
2 changed files with 22 additions and 1 deletions

View File

@@ -170,7 +170,7 @@ public final class TextComponent extends BaseComponent
}
continue;
}
int pos = message.indexOf( ' ', i );
int pos = indexOfSpecial( message, i );
if ( pos == -1 )
{
pos = message.length();
@@ -205,6 +205,20 @@ public final class TextComponent extends BaseComponent
appender.accept( component );
}
private static int indexOfSpecial(String message, int pos)
{
for ( int i = pos; i < message.length(); i++ )
{
char c = message.charAt( i );
if ( c == ' ' || Character.isISOControl( c ) )
{
return i;
}
}
return -1;
}
/**
* Internal compatibility method to transform an array of components to a
* single component.

View File

@@ -562,6 +562,13 @@ public class ComponentsTest
assertNotNull( url2 );
assertTrue( url2.getAction() == ClickEvent.Action.OPEN_URL );
assertEquals( "http://google.com/test", url2.getValue() );
BaseComponent[] test3 = TextComponent.fromLegacyText( "Text\nhttp://google.com\n newline3" );
ClickEvent url3 = test3[1].getClickEvent();
assertNotNull( url3 );
assertTrue( url3.getAction() == ClickEvent.Action.OPEN_URL );
assertEquals( "http://google.com", url3.getValue() );
assertEquals( "\n newline3", BaseComponent.toPlainText( test3[2] ) );
}
@Test