Index: lib/Stubmail.pm =================================================================== --- lib/Stubmail.pm (revision 85) +++ lib/Stubmail.pm (working copy) @@ -225,7 +225,7 @@ } sub mightHaveMail { - my($s, $r, $host, $port, $sock, $ipaddr, $portaddr, $start, %might, @have, + my($s, $r, $host, $port, $sock, $ipaddr, $portaddr, $start, %might, @pairs, $pair, $rr, $msg, $rval, $id); (@pairs) = @_; @@ -233,9 +233,9 @@ $sock = new IO::Socket::INET(Proto => 'udp', Blocking => 0); foreach $pair (@pairs) { - $might{cookie($pair)} = $pair; - - unless (cookie($pair)) { + if (cookie($pair)) { + $might{cookie($pair)} = $pair; + } else { # print "No cookie for pair: $pair\n"; $might{$id++} = $pair; next; @@ -276,17 +276,19 @@ $start = time(); sleep($UDP_WAIT); # todo: better timeout system while ($portaddr = $sock->recv($msg, 4096, 0)) { - $msg =~ m/([0-9a-f]+)\:([01e])/; - $rval = $2; $msg = $1; - print "got msg: $msg ($rval)\n"; + unless ($msg =~ m/^([\s0-9a-f]+)\:([01e])$/) { + print STDERR "Couldn't parse message: $msg\n"; + } else { + $rval = $2; $msg = $1; + print "got msg: $msg ($rval)\n"; - if ($rval eq 0) { - # no mail for us confirmed - delete($might{$msg}); + if ($rval eq 0) { + # no mail for us confirmed + delete($might{$msg}); + } } } - (@have) = values(%might); - return (@have); + return (values(%might)); } sub intoMaildir {