diff options
author | Danny van Heumen <danny@dannyvanheumen.nl> | 2014-08-02 23:08:04 +0200 |
---|---|---|
committer | Danny van Heumen <danny@dannyvanheumen.nl> | 2014-08-02 23:08:04 +0200 |
commit | dae8ef6c0913977b4feb05112ecc2781afe6ff71 (patch) | |
tree | 3332abb4f345128f6a8568c1c5996a04e04c92ca /src/net | |
parent | 7b66dc70aad091c78a6f1941c7fd7553e88fe2ec (diff) | |
download | jitsi-dae8ef6c0913977b4feb05112ecc2781afe6ff71.zip jitsi-dae8ef6c0913977b4feb05112ecc2781afe6ff71.tar.gz jitsi-dae8ef6c0913977b4feb05112ecc2781afe6ff71.tar.bz2 |
Verify chat room name inside ChatRoomIrcImpl.
Diffstat (limited to 'src/net')
-rw-r--r-- | src/net/java/sip/communicator/impl/protocol/irc/ChatRoomIrcImpl.java | 30 | ||||
-rw-r--r-- | src/net/java/sip/communicator/impl/protocol/irc/IrcStack.java | 23 |
2 files changed, 52 insertions, 1 deletions
diff --git a/src/net/java/sip/communicator/impl/protocol/irc/ChatRoomIrcImpl.java b/src/net/java/sip/communicator/impl/protocol/irc/ChatRoomIrcImpl.java index 2ced60b..5abd64a 100644 --- a/src/net/java/sip/communicator/impl/protocol/irc/ChatRoomIrcImpl.java +++ b/src/net/java/sip/communicator/impl/protocol/irc/ChatRoomIrcImpl.java @@ -151,11 +151,39 @@ public class ChatRoomIrcImpl throw new IllegalArgumentException( "chatRoomName cannot be null or empty string"); } - this.chatRoomName = chatRoomName; + this.chatRoomName = verifyName(chatRoomName); this.isSystem = isSystem; } /** + * Verify if the chat room name/identifier meets all the criteria. + * + * @param name chat room name/identifier + * @return returns the chat room name if it is valid + * @throws IllegalArgumentException if name/identifier contains invalid + * characters + */ + private String verifyName(final String name) + { + final char prefix = name.charAt(0); + if (!this.parentProvider.getIrcStack().getChannelTypes() + .contains(prefix)) + { + throw new IllegalArgumentException("invalid channel prefix: " + + prefix); + } + for (char c : IrcStack.SPECIAL_CHARACTERS) + { + if (name.contains("" + c)) + { + throw new IllegalArgumentException( + "chat room identifier contains illegal character: " + c); + } + } + return name; + } + + /** * hashCode implementation for Chat Room. * * @return returns hash code for this instance diff --git a/src/net/java/sip/communicator/impl/protocol/irc/IrcStack.java b/src/net/java/sip/communicator/impl/protocol/irc/IrcStack.java index 775516c..75e2547 100644 --- a/src/net/java/sip/communicator/impl/protocol/irc/IrcStack.java +++ b/src/net/java/sip/communicator/impl/protocol/irc/IrcStack.java @@ -46,6 +46,26 @@ public class IrcStack private static final Logger LOGGER = Logger.getLogger(IrcStack.class); /** + * Set of characters with special meanings for IRC, such as: ',' used as + * separator of list of items (channels, nicks, etc.), ' ' (space) separator + * of command parameters, etc. + */ + public static final Set<Character> SPECIAL_CHARACTERS; + + /** + * Initialize set of special characters. + */ + static { + HashSet<Character> specials = new HashSet<Character>(); + specials.add('\0'); + specials.add('\n'); + specials.add('\r'); + specials.add(' '); + specials.add(','); + SPECIAL_CHARACTERS = Collections.unmodifiableSet(specials); + } + + /** * Parent provider for IRC. */ private final ProtocolProviderServiceIrcImpl provider; @@ -556,6 +576,9 @@ public class IrcStack final String chatRoomId = chatroom.getIdentifier(); if (!getChannelTypes().contains(chatRoomId.charAt(0))) { + // TODO I believe this is obsolete, now that ChatRoomIrcImpl checks + // chat room name upon creation. + // I'm not going to throw an exception, but I believe that this case // cannot happen (anymore). LOGGER.warn("Is chat room '" + chatRoomId |