Index: src/s_svs.c
===================================================================
RCS file: /home/cmunk/ircsystems/cvsroot/unreal/src/Attic/s_svs.c,v
retrieving revision 1.1.2.38.2.5
diff -u -r1.1.2.38.2.5 s_svs.c
--- src/s_svs.c	9 Dec 2005 20:21:37 -0000	1.1.2.38.2.5
+++ src/s_svs.c	21 Dec 2005 08:35:28 -0000
@@ -226,17 +226,26 @@
 aClient *acptr;
 int ret;
 
-	if (parc < 2 || *parv[1] == '\0') 
+	/* Give up now if there parv is empty */
+	if (parc < 1)
 	{
 		sendto_one(sptr, err_str(ERR_NOTEXTTOSEND), me.name, parv[0]);
 		return -1;
 	}
+	
 	if (!(alias = Find_alias(cmd))) 
 	{
 		sendto_one(sptr, ":%s %d %s %s :Unknown command",
 			me.name, ERR_UNKNOWNCOMMAND, parv[0], cmd);
 		return 0;
 	}
+	
+	/* If it isn't an ALIAS_COMMAND, we require a paramter ... We check ALIAS_COMMAND LATER */
+	if (alias->type != ALIAS_COMMAND && (parc < 2 || *parv[1] == '\0'))
+	{
+		sendto_one(sptr, err_str(ERR_NOTEXTTOSEND), me.name, parv[0]);
+		return -1;
+	}
 
 	if (alias->type == ALIAS_SERVICES) 
 	{
@@ -309,7 +318,9 @@
 	else if (alias->type == ALIAS_COMMAND) 
 	{
 		ConfigItem_alias_format *format;
-		char *ptr = parv[1];
+		char *ptr = "";
+		if (!(parc < 2 || *parv[1] == '\0'))
+			ptr = parv[1]; 
 		for (format = alias->format; format; format = (ConfigItem_alias_format *)format->next) 
 		{
 			if (regexec(&format->expr, ptr, 0, NULL, 0) == 0) 
@@ -318,8 +329,8 @@
 				int i = 0, j = 0, k = 1;
 				char output[501];
 				char nums[4];
-				char *current = MyMalloc(strlen(parv[1])+1);
-				bzero(current, strlen(parv[1])+1);
+				char *current = MyMalloc(strlen(ptr)+1);
+				bzero(current, strlen(ptr)+1);
 				bzero(output, sizeof output);
 				while(format->parameters[i] && j < 500) 
 				{
@@ -337,11 +348,11 @@
 							nums[k] = 0;
 							i--;
 							if (format->parameters[i+1] == '-') {
-								strrangetok(parv[1], current, ' ', atoi(nums),0);
+								strrangetok(ptr, current, ' ', atoi(nums),0);
 								i++;
 							}
 							else 
-								strrangetok(parv[1], current, ' ', atoi(nums), atoi(nums));
+								strrangetok(ptr, current, ' ', atoi(nums), atoi(nums));
 							if (!current)
 								continue;
 							if (j + strlen(current)+1 >= 500)
@@ -367,6 +378,13 @@
 					output[j++] = format->parameters[i++];
 				}
 				output[j] = 0;
+				/* Now check to make sure we have something to send */
+				if (strlen(output) == 0)
+				{
+					sendto_one(sptr, err_str(ERR_NOTEXTTOSEND), me.name, parv[0]);
+					return -1;
+				}
+				
 				if (format->type == ALIAS_SERVICES) 
 				{
 					if (SERVICES_NAME && (acptr = find_person(format->nick, NULL)))
@@ -417,15 +435,15 @@
 					aChannel *chptr;
 					if ((chptr = find_channel(format->nick, NULL)))
 					{
-						if (!can_send(sptr, chptr, parv[1], 0))
+						if (!can_send(sptr, chptr, output, 0))
 						{
-							if (alias->spamfilter && (ret = dospamfilter(sptr, parv[1], SPAMF_CHANMSG, chptr->chname, 0)) < 0)
+							if (alias->spamfilter && (ret = dospamfilter(sptr, output, SPAMF_CHANMSG, chptr->chname, 0)) < 0)
 								return ret;
 							sendto_channelprefix_butone_tok(sptr,
 							    sptr, chptr,
 							    PREFIX_ALL, MSG_PRIVATE,
 							    TOK_PRIVATE, chptr->chname,
-							    parv[1], 0);
+							    output, 0);
 							return 0;
 						}
 					}
@@ -439,6 +457,5 @@
 		}
 		return 0;
 	}
-		
 	return 0;
 }
