From fad7eca91130783e810142127f7cb71ac89f7ffb Mon Sep 17 00:00:00 2001 From: Giuseppe Bilotta Date: Wed, 7 Jan 2009 23:39:33 +0100 Subject: [PATCH] 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. --- lib/rbot/rfc2812.rb | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) 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 -- 2.39.5