]> git.donarmstrong.com Git - infobot.git/blobdiff - src/IRC/IrcHelpers.pl
Fixed bug in "+sed" by enforcing limit on output when using s///g
[infobot.git] / src / IRC / IrcHelpers.pl
index ccc0d403dbe6533546d0929b0893bd8e77520fea..cc53742069fc4fe2ec826c6f7a0c30f46a971a1a 100644 (file)
@@ -235,9 +235,14 @@ sub hookMsg {
            $msgType =~ /public/ and
             $orig{message} =~ /^s\/([^;\/]*)\/([^;\/]*)\/([g]*)$/) {
        my $sedmsg = $seencache{$who}{'msg'};
-       eval "\$sedmsg =~ s/$1/$2/$3;"
-       &DEBUG("sed \"$orig{message}\" \"$sedmsg\"");
-       &msg($talkchannel, "$orig{who} meant: $sedmsg");
+       eval "\$sedmsg =~ s/\Q$1\E/\Q$2\E/$3;";
+       $sedmsg =~ s/^(.{255}).*$/$1.../; # 255 char max to prevent flood
+
+       if ($sedmsg ne $seencache{$who}{'msg'}) {
+           &DEBUG("sed \"" . $orig{message} . "\" \"" .
+                   $seencache{$who}{'msg'} . "\" \"" . $sedmsg. "\"");
+           &msg($talkchannel, "$orig{who} meant: $sedmsg");
+       }
     } elsif ((!$skipmessage or &IsChanConf('seenStoreAll') > 0) and
            &IsChanConf('seen') > 0 and $msgType =~ /public/) {
        $seencache{$who}{'time'} = time();