X-Git-Url: https://jfr.im/git/irc/rqf/shadowircd.git/blobdiff_plain/f06c147c70cf72b40e4ec0ec3b5aca86662beb80..55bb399f79289b68e9d25db15c60463502d4c2dc:/modules/m_links.c diff --git a/modules/m_links.c b/modules/m_links.c index e4a0f88..bc28ad8 100644 --- a/modules/m_links.c +++ b/modules/m_links.c @@ -59,10 +59,8 @@ DECLARE_MODULE_AV1(links, NULL, NULL, links_clist, links_hlist, NULL, "$Revision /* * m_links - LINKS message handler - * parv[0] = sender prefix * parv[1] = servername mask * or - * parv[0] = sender prefix * parv[1] = server to query * parv[2] = servername mask */ @@ -89,6 +87,8 @@ mo_links(struct Client *client_p, struct Client *source_p, int parc, const char if(parc > 2) { + if(strlen(parv[2]) > HOSTLEN) + return 0; if(hunt_server(client_p, source_p, ":%s LINKS %s :%s", 1, parc, parv) != HUNTED_ISME) return 0; @@ -140,19 +140,21 @@ clean_string(char *dest, const unsigned char *src, size_t len) if(dest == NULL || src == NULL) return NULL; - len -= 3; /* allow for worst case, '^A\0' */ - - while (*src && (len > 0)) + while (*src && (len > 1)) { if(*src & 0x80) /* if high bit is set */ { *d++ = '.'; --len; + if(len <= 1) + break; } else if(!IsPrint(*src)) /* if NOT printable */ { *d++ = '^'; --len; + if(len <= 1) + break; *d++ = 0x40 + *src; /* turn it into a printable */ } else