DBD::CSV failures hidden in the deep

"H.Merijn Brand" <[email protected]>
Newsgroups gmane.comp.lang.perl.modules.dbi.sybase.devel
Message-ID <[email protected]>
There are currently quite a few reports about DBD::CSV not able to
install, as 50_chopblanks is failing

I finally found a combination in which I can reproduce the failure, but
it seems brittle and unstable. We needz help :)

How does it look:

FAIL:

DBD-CSV-0.36 630 > make test
Skip blib/lib/Bundle/DBD/CSV.pm (unchanged)
Skip blib/lib/DBD/CSV.pm (unchanged)
PERL_DL_NONLAZY=1 /pro/bin/perl5.14.1 "-MExtUtils::Command::MM" "-e"
"test_harness(0, 'blib/lib', 'blib/arch')" t/*.t t/00_meta.t .........
skipped: Author tests not required for installation
t/00_pod.t .......... ok t/00_pod_cov.t ...... ok
t/10_base.t ......... 2/? # Showing relevant versions
# Using DBI            version 1.622
# Using DBD::File      version 0.40
# Using SQL::Statement version 1.401
# Using Text::CSV_XS   version 0.94
# DBD::CSV                 0.36 using Text::CSV_XS (0.94)
#   DBD::File              0.40 using IO::File (1.15)
#     DBI::DBD::SqlEngine  0.03 using SQL::Statement 1.401
# DBI                      1.622
# OS                       linux (2.6.37.6-0.5-desktop)
# Perl                     5.014001 (x86_64-linux-ld)
t/10_base.t ......... ok
t/11_dsnlist.t ...... ok
t/20_createdrop.t ... ok
t/30_insertfetch.t .. ok
t/31_delete.t ....... ok
t/32_update.t ....... ok
t/40_numrows.t ...... ok
t/41_nulls.t ........ ok
t/42_bindparam.t .... ok
t/43_blobs.t ........ ok
t/44_listfields.t ... ok
t/48_utf8.t ......... ok
t/50_chopblanks.t ... 1/?
#   Failed test 'fetch'
#   at t/50_chopblanks.t line 41.

#   Failed test 'content'
#   at t/50_chopblanks.t line 42.
#     Structures begin differing at:
#          $got = undef
#     $expected = ARRAY(0x162ff08)

#   Failed test 'fetch'
#   at t/50_chopblanks.t line 41.

#   Failed test 'content'
#   at t/50_chopblanks.t line 42.
#     Structures begin differing at:
#          $got = undef
#     $expected = ARRAY(0x1628560)
# Looks like you failed 4 tests of 65.
t/50_chopblanks.t ... Dubious, test returned 4 (wstat 1024, 0x400)
Failed 4/65 subtests
t/51_commit.t ....... ok
t/60_misc.t ......... ok
t/70_csv.t .......... ok
t/71_csv-ext.t ...... ok
t/72_csv-schema.t ... ok
t/73_csv-case.t ..... ok
t/80_rt.t ........... ok
t/85_error.t ........ ok

Test Summary Report
-------------------
t/50_chopblanks.t (Wstat: 1024 Tests: 65 Failed: 4)
  Failed tests:  29-30, 47-48
  Non-zero exit status: 4
t/73_csv-case.t   (Wstat: 0 Tests: 44 Failed: 0)
  TODO passed:   30, 32, 34, 36, 38, 40, 42
Files=24, Tests=723,  4 wallclock secs ( 0.12 usr  0.04 sys +  3.57
cusr  0.41 csys =  4.14 CPU) Result: FAIL
Failed 1/24 test programs. 4/723 subtests failed.

Then change like below and behold:

PASS:

DBD-CSV-0.36 633 > make test
PERL_DL_NONLAZY=1 /pro/bin/perl5.14.1 "-MExtUtils::Command::MM" "-e"
"test_harness(0, 'blib/lib', 'blib/arch')" t/*.t t/00_meta.t .........
skipped: Author tests not required for installation
t/00_pod.t .......... ok t/00_pod_cov.t ...... ok
t/10_base.t ......... 1/? # Showing relevant versions
# Using DBI            version 1.622
# Using DBD::File      version 0.40
# Using SQL::Statement version 1.401
# Using Text::CSV_XS   version 0.94
# DBD::CSV                 0.36 using Text::CSV_XS (0.94)
#   DBD::File              0.40 using IO::File (1.15)
#     DBI::DBD::SqlEngine  0.03 using SQL::Statement 1.401
# DBI                      1.622
# OS                       linux (2.6.37.6-0.5-desktop)
# Perl                     5.014001 (x86_64-linux-ld)
t/10_base.t ......... ok
t/11_dsnlist.t ...... ok
t/20_createdrop.t ... ok
t/30_insertfetch.t .. ok
t/31_delete.t ....... ok
t/32_update.t ....... ok
t/40_numrows.t ...... ok
t/41_nulls.t ........ ok
t/42_bindparam.t .... ok
t/43_blobs.t ........ ok
t/44_listfields.t ... ok
t/48_utf8.t ......... ok
t/50_chopblanks.t ... ok
t/51_commit.t ....... ok
t/60_misc.t ......... ok
t/70_csv.t .......... ok
t/71_csv-ext.t ...... ok
t/72_csv-schema.t ... ok
t/73_csv-case.t ..... ok
t/80_rt.t ........... ok
t/85_error.t ........ ok
All tests successful.

Test Summary Report
-------------------
t/73_csv-case.t   (Wstat: 0 Tests: 44 Failed: 0)
  TODO passed:   30, 32, 34, 36, 38, 40, 42
Files=24, Tests=723,  4 wallclock secs ( 0.13 usr  0.04 sys +  3.57
cusr  0.40 csys =  4.14 CPU) Result: PASS

--8<--- SqlEngine.pm.diff
---
lib/perl5/site_perl/5.14.1/x86_64-linux-ld/DBI/DBD/SqlEngine.pm.org
2012-12-05 15:53:34.000000000 +0100 +++
lib/perl5/site_perl/5.14.1/x86_64-linux-ld/DBI/DBD/SqlEngine.pm
2012-12-05 15:53:40.000000000 +0100 @@ -795,6 +795,7 @@ sub execute
local $SIG{__WARN__} = sub { push @err, @_ }; $result =
$stmt->execute( $sth, $params ); };
+    my $dummy = \[];
     unless ( defined $result )
     {
         $sth->set_err( $DBI::stderr, $@ || $stmt->{errstr} || $err[0]
); -->8---

These cause FAIL (as in it still FAILS, so no change):

     my $dummy = $result;
     my $dummy = 1;
     my $dummy = [];
     my $dummy = {};

These cause PASS:

     my $dummy = { bonkers => 1 };
     my $dummy = [ 1, 2 ];
     my $dummy = \[];
     my $dummy = \{};

As Tim nicely put it: this smells like the canary in the coalmines

I am currently trying to get all the prereqs installed on perl-5.17.6
compiled with clang -fsanitize=address, but I cannot install a lot of
the prereq's including DBI. I will post a separate message about that

-- 
H.Merijn Brand  http://tux.nl   Perl Monger  http://amsterdam.pm.org/
using perl5.00307 .. 5.17   porting perl5 on HP-UX, AIX, and openSUSE
http://mirrors.develooper.com/hpux/        http://www.test-smoke.org/
http://qa.perl.org   http://www.goldmark.org/jeff/stupid-disclaimers/
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.