summaryrefslogtreecommitdiff
path: root/lib/rbot/rfc2812.rb
diff options
context:
space:
mode:
authorGiuseppe Bilotta <giuseppe.bilotta@gmail.com>2009-01-07 23:39:33 +0100
committerGiuseppe Bilotta <giuseppe.bilotta@gmail.com>2009-01-08 14:50:46 +0100
commitfad7eca91130783e810142127f7cb71ac89f7ffb (patch)
tree80f4cba38ef375c1ba0dc44d93025967b72339a2 /lib/rbot/rfc2812.rb
parent53613d63b294841cd0fd8995b76f4378b1c288f6 (diff)
rfc2812: better handling of incomplete mode lines
Sometimes the bot may receive incomplete or malformed mode lines. This can be seen for example by kicking repeatedly and at very short intervals the bot from a channel with +l set to some numbers (at least on freenode). We (don't) handle these malformed modelines by skipping them rather than crashing.
Diffstat (limited to 'lib/rbot/rfc2812.rb')
-rw-r--r--lib/rbot/rfc2812.rb8
1 files changed, 7 insertions, 1 deletions
diff --git a/lib/rbot/rfc2812.rb b/lib/rbot/rfc2812.rb
index 21cd9ff7..ee0d08d6 100644
--- a/lib/rbot/rfc2812.rb
+++ b/lib/rbot/rfc2812.rb
@@ -1534,7 +1534,7 @@ module Irc
data[:modes].last << arg
end
}
- else
+ when Channel
# array of indices in data[:modes] where parameters
# are needed
who_wants_params = []
@@ -1587,6 +1587,10 @@ module Irc
getting_args = true unless who_wants_params.empty?
end
end
+ unless who_wants_params.empty?
+ warning "Unhandled malformed modeline #{data[:modestring]} (unexpected empty arguments)"
+ return
+ end
data[:modes].each { |mode|
set, key, val = mode
@@ -1596,6 +1600,8 @@ module Irc
data[:target].mode[key].send(set)
end
}
+ else
+ warning "Ignoring #{data[:modestring]} for unrecognized target #{argv[0]} (#{data[:target].inspect})"
end
end
end