|
@@ -213,8 +213,17 @@ func csAmodeHandler(service *ircService, server *Server, client *Client, command
|
213
|
213
|
}
|
214
|
214
|
|
215
|
215
|
modeChanges, unknown := modes.ParseChannelModeChanges(params[1:]...)
|
|
216
|
+ invalid := len(unknown) != 0
|
|
217
|
+ // #2002: +f takes an argument but is not a channel-user mode,
|
|
218
|
+ // check for anything valid as a channel mode change that is not valid
|
|
219
|
+ // as an AMODE change
|
|
220
|
+ for _, modeChange := range modeChanges {
|
|
221
|
+ if !utils.SliceContains(modes.ChannelUserModes, modeChange.Mode) {
|
|
222
|
+ invalid = true
|
|
223
|
+ }
|
|
224
|
+ }
|
216
|
225
|
var change modes.ModeChange
|
217
|
|
- if len(modeChanges) > 1 || len(unknown) > 0 {
|
|
226
|
+ if len(modeChanges) > 1 || invalid {
|
218
|
227
|
service.Notice(rb, client.t("Invalid mode change"))
|
219
|
228
|
return
|
220
|
229
|
} else if len(modeChanges) == 1 {
|