Mark, Amavisd-maia had in the pointed to area a line: $sth->execute(@pos_args); # do the query
Which should have read: $sth->execute($sel, @pos_args); # do the query It now runs again smoothly. Thanks, Guus -----Original Message----- From: [email protected] [mailto:[email protected]] On Behalf Of Guus Leeuw jr Sent: 14 April 2012 07:25 To: [email protected] Subject: RE: Weird error with SQL lookups in amavisd Mark, > Guus, > > > I upgraded my smtp box from Fedora 13 to Fedora 15, also upgraded > > amavisd in the process. > > > > According to amavisd, I'm now at 2.6.6, and I keep getting the > > following > > errors: > > Apr 12 15:07:02 smtp amavis[10332]: (10332-02) (!)lookup_sql: Can't > > use an undefined value as an ARRAY reference at (eval 78) line 257, > > <GEN20> line 3., , Apr 12 15:07:02 smtp amavis[10332]: (10332-02) > > (!!)TROUBLE in > > process_request: Can't use an undefined value as an ARRAY reference > > at (eval 78) line 257, <GEN20> line 3. at (eval 78) line 282, > > <GEN20> line 3. > > Apr 12 15:07:02 smtp amavis[10332]: (10332-02) (!)Requesting process > > rundown after fatal error > > > > Anybody seen this or has a solution, or even a way of figuring out > > what Perl actually means to say with "eval 78" <GEN20>, line 257, > > line 282, or line 3? > > Lines 257 and 282 are relative to a package Amavis::Lookup::SQLfield, counting from a __DATA__ line. > > Search forward for: > sub lookup_sql( > then search backwards for: > __DATA__ > then go down 257 lines, arriving at or near: > $match = {}; @$match{@names} = @$a_ref; > > The 282 then corresponds to a > die $err; > a bit further down, which caught the eval failure and propagated it further. > > This is the area in question: > > $conn_h->execute($sel,@pos_args); # do the query > # fetch query results > while ( defined($a_ref=$conn_h->fetchrow_arrayref($sel)) ) { > my(@names) = @{$conn_h->sth($sel)->{NAME_lc}}; > $match = {}; @$match{@names} = @$a_ref; > if ($self->{clause_name} eq 'sel_policy' && > !exists $match->{'local'} && $match->{'email'} eq '@.') { [...] > } or do { > my($err) = $@ ne '' ? $@ : "errno=$!"; chomp $err; > do_log(-1, "lookup_sql: %s, %s, %s", $err, $DBI::err, $DBI::errstr); > die $err if $err =~ /^timed out\b/; # resignal timeout > die $err; > }; > > > > lookup_sql: Can't use an undefined value as an ARRAY reference at > > (eval 78) line 257 > > Puzzling. The "while (defined($a_ref..." should ensure that > we only enter the loop when $a_ref is defined, yet the @$a_ref > appparently thinks it is undefined. I could be wrong by a line or two, but this is the area that needs to be investigated. I don't see what could be wrong there, nor do I remember seeing a > similar report. > > Perhaps adding a couple of calls to do_log in that area would shed > some light on the problem. I'll certainly do that when testing during next week... > > Btw, which version of perl is running now, and which version of > amavisd was running before the upgrade. Perl is now at 5.14, amavisd-maia was running before, which was branched off of 2.2.1. I've tried standard amavisd with postvis: Same problem... Tried standard amavisd with the old amavis-maia database, all to no avail. As I said: I'll be using the above tips to run some more testing next week, so I'll provide more answers then. Thanks so far, Regards, Guus
