1
0
mirror of https://github.com/SquidDev-CC/CC-Tweaked synced 2025-04-21 02:03:13 +00:00

Fix several issues with char/paste event validation

- Fix isValidClipboard always returning true.
 - Fix characters >=128 being rejected. We changed the signature from a
   byte to an int in 0f123b5efdca5f277f2c15208b9241d3fb9ca8fa, but
   didn't update all call sites.

   Valhalla cannot come soon enough. I would love to be able to have
   (cheap) wrapper classes for some of these types.

See Zeus-guy's comments in #860.
This commit is contained in:
Jonathan Coates 2025-03-16 14:03:21 +00:00
parent 594738a022
commit b6f41a0df5
No known key found for this signature in database
GPG Key ID: B9E431FF07C98D06
2 changed files with 12 additions and 1 deletions

View File

@ -74,7 +74,7 @@ public class ServerInputState<T extends AbstractContainerMenu & ComputerMenu> im
}
private static boolean isValidClipboard(ByteBuffer buffer) {
for (int i = buffer.remaining(), max = buffer.limit(); i < max; i++) {
for (int i = buffer.position(), max = buffer.limit(); i < max; i++) {
if (!StringUtil.isTypableChar(buffer.get(i))) return false;
}
return true;

View File

@ -70,6 +70,17 @@ public final class StringUtil {
};
}
/**
* Check if a character is capable of being input and passed to a {@linkplain ComputerEvents#charTyped(ComputerEvents.Receiver, byte)
* "char" event}.
*
* @param chr The character to check.
* @return Whether this character can be typed.
*/
public static boolean isTypableChar(byte chr) {
return isTypableChar(chr & 0xFF);
}
/**
* Check if a character is capable of being input and passed to a {@linkplain ComputerEvents#charTyped(ComputerEvents.Receiver, byte)
* "char" event}.