Merge pull request #260 from RichardHitt/master

Minimize url grabbing
This commit is contained in:
TingPing 2012-11-16 12:37:20 -08:00
commit 096e49ddc8
2 changed files with 45 additions and 1 deletions

View File

@ -157,6 +157,8 @@ server_send_real (server *serv, char *buf, int len)
{ {
fe_add_rawlog (serv, buf, len, TRUE); fe_add_rawlog (serv, buf, len, TRUE);
url_check_line (buf, len);
return tcp_send_real (serv->ssl, serv->sok, serv->encoding, serv->using_irc, return tcp_send_real (serv->ssl, serv->sok, serv->encoding, serv->using_irc,
buf, len); buf, len);
} }

View File

@ -331,12 +331,53 @@ url_check_word (const char *word, int len)
return 0; return 0;
} }
/* List of IRC commands for which contents (and thus possible URLs)
* are visible to the user. NOTE: Trailing blank required in each. */
static char *commands[] = {
"NOTICE ",
"PRIVMSG ",
"TOPIC ",
"332 ", /* RPL_TOPIC */
"372 " /* RPL_MOTD */
};
#define ARRAY_SIZE(a) (sizeof (a) / sizeof ((a)[0]))
void void
url_check_line (char *buf, int len) url_check_line (char *buf, int len)
{ {
char *po = buf; char *po = buf;
char *start; char *start;
int wlen; int i, wlen;
/* Skip over message prefix */
if (*po == ':')
{
po = strchr (po, ' ');
if (!po)
return;
po++;
}
/* Allow only commands from the above list */
for (i = 0; i < ARRAY_SIZE (commands); i++)
{
char *cmd = commands[i];
int len = strlen (cmd);
if (strncmp (cmd, po, len) == 0)
{
po += len;
break;
}
}
if (i == ARRAY_SIZE (commands))
return;
/* Skip past the channel name or user nick */
po = strchr (po, ' ');
if (!po)
return;
po++;
if (buf[0] == ':' && buf[1] != 0) if (buf[0] == ':' && buf[1] != 0)
po++; po++;
@ -350,6 +391,7 @@ url_check_line (char *buf, int len)
{ {
case 0: case 0:
case ' ': case ' ':
case '\r':
wlen = po - start; wlen = po - start;
if (wlen > 2) if (wlen > 2)