mirror of
https://github.com/SquidDev-CC/CC-Tweaked
synced 2025-08-24 06:22:18 +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:
parent
876fd8ddb8
commit
b5c0c6e104
@ -26,7 +26,8 @@ public class KeyConverter {
|
|||||||
var name = GLFW.glfwGetKeyName(key, scanCode);
|
var name = GLFW.glfwGetKeyName(key, scanCode);
|
||||||
if (name == null || name.length() != 1) return key;
|
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);
|
var character = name.charAt(0);
|
||||||
|
|
||||||
// 0-9 and A-Z map directly to their GLFW key (they're the same ASCII code).
|
// 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 idx = 0;
|
||||||
|
|
||||||
var iterator = clipboard.codePoints().iterator();
|
var iterator = clipboard.codePoints().iterator();
|
||||||
while (iterator.hasNext() && idx <= output.length) {
|
while (iterator.hasNext() && idx < output.length) {
|
||||||
var chr = unicodeToTerminal(iterator.next());
|
var chr = unicodeToTerminal(iterator.next());
|
||||||
if (chr < 0) continue; // Strip out unconvertible characters
|
if (chr < 0) continue; // Strip out unconvertible characters
|
||||||
if (!isTypableChar(chr)) break; // Stop at untypable ones.
|
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
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user