aboutsummaryrefslogtreecommitdiffstats
path: root/src/net
diff options
context:
space:
mode:
authorDanny van Heumen <danny@dannyvanheumen.nl>2014-08-02 23:08:04 +0200
committerDanny van Heumen <danny@dannyvanheumen.nl>2014-08-02 23:08:04 +0200
commitdae8ef6c0913977b4feb05112ecc2781afe6ff71 (patch)
tree3332abb4f345128f6a8568c1c5996a04e04c92ca /src/net
parent7b66dc70aad091c78a6f1941c7fd7553e88fe2ec (diff)
downloadjitsi-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.java30
-rw-r--r--src/net/java/sip/communicator/impl/protocol/irc/IrcStack.java23
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