summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorRichardHitt <rbh00@netcom.com>2013-01-11 01:39:21 -0800
committerRichardHitt <rbh00@netcom.com>2013-01-11 01:39:21 -0800
commit487ac0a011655b78de5b41bf2c8c68143f9b9bf2 (patch)
tree601ff0d646b6eab0807f35ed094cccb0c8e48043
parent475eb9fcaab1d846a3617f587f22bd77cdeddd5e (diff)
Correct nick recognition. Closes 372.
-rw-r--r--src/common/url.c20
1 files changed, 17 insertions, 3 deletions
diff --git a/src/common/url.c b/src/common/url.c
index 0ee09988..873878ac 100644
--- a/src/common/url.c
+++ b/src/common/url.c
@@ -188,6 +188,16 @@ static int laststart = 0;
 static int lastend = 0;
 static int lasttype = 0;
 
+static int
+strchrs (char c, char *s)
+{
+	while (*s)
+		if (c == *s++)
+			return TRUE;
+	return FALSE;
+}
+
+#define NICKPRE "~+!@%%&"
 int
 url_check_word (const char *word)
 {
@@ -196,11 +206,15 @@ url_check_word (const char *word)
 	{
 		switch (lasttype)
 		{
+			char *str;
+
 			case WORD_NICK:
-				if (!isalnum (word[laststart]))
+				if (strchrs (word[laststart], NICKPRE))
 					laststart++;
-				if (!userlist_find (current_sess, &word[laststart]))
+				str = strndup (&word[laststart], lastend - laststart);
+				if (!userlist_find (current_sess, str))
 					lasttype = 0;
+				free (str);
 				return lasttype;
 			case WORD_EMAIL:
 				if (!isalnum (word[laststart]))
@@ -448,7 +462,7 @@ re_email (void)
 }
 
 /*	NICK description --- */
-#define NICKPRE "~+!@%%&"
+/* For NICKPRE see before url_check_word() */
 #define NICKHYP	"-"
 #define NICKLET "a-z"
 #define NICKDIG "0-9"