diff --git a/core/src/main/java/com/muwire/core/util/DataUtil.java b/core/src/main/java/com/muwire/core/util/DataUtil.java index d8491cac..fd7207d5 100644 --- a/core/src/main/java/com/muwire/core/util/DataUtil.java +++ b/core/src/main/java/com/muwire/core/util/DataUtil.java @@ -18,6 +18,22 @@ import net.i2p.util.ConcurrentHashSet; public class DataUtil { + /** The 32 valid Base32 values. */ + private final static char[] ALPHABET = {'a', 'b', 'c', 'd', + 'e', 'f', 'g', 'h', 'i', 'j', + 'k', 'l', 'm', 'n', 'o', 'p', + 'q', 'r', 's', 't', 'u', 'v', + 'w', 'x', 'y', 'z', + '2', '3', '4', '5', '6', '7'}; + + public static boolean validBase32(char c) { + for (int i = 0; i < ALPHABET.length; i++) { + if (ALPHABET[i] == c) + return true; + } + return false; + } + private final static int MAX_SHORT = (0x1 << 16) - 1; static void writeUnsignedShort(int value, OutputStream os) throws IOException { diff --git a/gui/src/main/groovy/com/muwire/gui/chat/ChatEntry.groovy b/gui/src/main/groovy/com/muwire/gui/chat/ChatEntry.groovy index 282aa3a4..e3414d69 100644 --- a/gui/src/main/groovy/com/muwire/gui/chat/ChatEntry.groovy +++ b/gui/src/main/groovy/com/muwire/gui/chat/ChatEntry.groovy @@ -1,6 +1,7 @@ package com.muwire.gui.chat import com.muwire.core.Constants +import com.muwire.core.util.DataUtil import com.muwire.gui.UISettings import com.muwire.gui.contacts.POPLabel import com.muwire.gui.profile.PersonaOrProfile @@ -23,7 +24,7 @@ class ChatEntry extends JTextPane { private static final SimpleDateFormat SDF = new SimpleDateFormat("dd/MM hh:mm:ss") private static final char AT = "@".toCharacter() - + private final UISettings settings private final Function function @@ -132,6 +133,12 @@ class ChatEntry extends JTextPane { @Override ParsingState consume(char c) { + if (!DataUtil.validBase32(c)) { + consumed = true + String payload = "${currentName}${stringBuilder.toString()}" + tokens << new TextChatToken(payload) + return new TextParsingState() + } if (stringBuilder.length() == maxSize) { consumed = true String readableName = "${currentName}${stringBuilder.toString()}"