X-Git-Url: http://git.pk910.de/?a=blobdiff_plain;f=ircd%2Fm_burst.c;h=262e247069f6ca1ec9382128dc3a29c93a8e6c16;hb=63d0017b5c93c23e047597ada43d582030fd468b;hp=e95a0696971eaf43f9f6c2984602073c7f974e40;hpb=5b25fb7d3ae72b9a11821f4e98fb0c172a575e5f;p=ircu2.10.12-pk.git diff --git a/ircd/m_burst.c b/ircd/m_burst.c index e95a069..262e247 100644 --- a/ircd/m_burst.c +++ b/ircd/m_burst.c @@ -115,6 +115,8 @@ netride_modes(int parc, char **parv, const char *curr_key) assert(modes && modes[0] == '+'); while (*modes) { switch (*modes++) { + case '-': + return -1; case 'i': result |= MODE_INVITEONLY; break; @@ -282,7 +284,13 @@ int ms_burst(struct Client *cptr, struct Client *sptr, int parc, char *parv[]) if (parv[param][0] != '+') continue; check_modes = netride_modes(parc - param, parv + param, chptr->mode.key); - if (check_modes) + if (check_modes < 0) + { + if (chptr->users == 0) + sub1_from_channel(chptr); + return protocol_violation(sptr, "Invalid mode string in BURST"); + } + else if (check_modes) { /* Clear any outstanding rogue invites */ mode_invite_clear(chptr);