mirror of
				https://github.com/SquidDev-CC/CC-Tweaked
				synced 2025-10-31 13:42:59 +00:00 
			
		
		
		
	Fix out-of-bounds when pasting too-long text
Used a `<=` instead of a `<`! How did I mess this up!? Fixes #2209
This commit is contained in:
		| @@ -26,7 +26,8 @@ public class KeyConverter { | ||||
|         var name = GLFW.glfwGetKeyName(key, scanCode); | ||||
|         if (name == null || name.length() != 1) return key; | ||||
| 
 | ||||
|         // If we've got a single character key name, try to translate it to a | ||||
|         // If we've got a single character as the key name, treat that as the ASCII value of the key, | ||||
|         // and map that back to a key code. | ||||
|         var character = name.charAt(0); | ||||
| 
 | ||||
|         // 0-9 and A-Z map directly to their GLFW key (they're the same ASCII code). | ||||
|   | ||||
| @@ -120,7 +120,7 @@ public final class StringUtil { | ||||
|         var idx = 0; | ||||
| 
 | ||||
|         var iterator = clipboard.codePoints().iterator(); | ||||
|         while (iterator.hasNext() && idx <= output.length) { | ||||
|         while (iterator.hasNext() && idx < output.length) { | ||||
|             var chr = unicodeToTerminal(iterator.next()); | ||||
|             if (chr < 0) continue; // Strip out unconvertible characters | ||||
|             if (!isTypableChar(chr)) break; // Stop at untypable ones. | ||||
|   | ||||
| @@ -0,0 +1,36 @@ | ||||
| // SPDX-FileCopyrightText: 2025 The CC: Tweaked Developers | ||||
| // | ||||
| // SPDX-License-Identifier: MPL-2.0 | ||||
| 
 | ||||
| package dan200.computercraft.core.util; | ||||
| 
 | ||||
| import dan200.computercraft.api.lua.LuaValues; | ||||
| import dan200.computercraft.test.core.ReplaceUnderscoresDisplayNameGenerator; | ||||
| import org.junit.jupiter.api.DisplayNameGeneration; | ||||
| import org.junit.jupiter.api.Test; | ||||
| import org.junit.jupiter.params.ParameterizedTest; | ||||
| import org.junit.jupiter.params.provider.ValueSource; | ||||
| 
 | ||||
| import static org.junit.jupiter.api.Assertions.assertEquals; | ||||
| 
 | ||||
| @DisplayNameGeneration(ReplaceUnderscoresDisplayNameGenerator.class) | ||||
| class StringUtilTest { | ||||
|     @ParameterizedTest | ||||
|     @ValueSource(strings = { "hello\nworld", "hello\n\rworld", "hello\rworld" }) | ||||
|     public void getClipboardString_returns_a_single_line(String input) { | ||||
|         var result = StringUtil.getClipboardString(input); | ||||
|         assertEquals(LuaValues.encode("hello"), result); | ||||
|     } | ||||
| 
 | ||||
|     @Test | ||||
|     public void getClipboardString_limits_length() { | ||||
|         var input = "abcdefghijklmnop".repeat(50); | ||||
|         var result = StringUtil.getClipboardString(input); | ||||
|         assertEquals(StringUtil.MAX_PASTE_LENGTH, result.limit()); | ||||
| 
 | ||||
|         assertEquals( | ||||
|             LuaValues.encode(input.substring(0, StringUtil.MAX_PASTE_LENGTH)), | ||||
|             result | ||||
|         ); | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user
	 Jonathan Coates
					Jonathan Coates