Hello community, here is the log from the commit of package perl-DBI for openSUSE:Factory checked in at 2017-09-04 12:18:31 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/perl-DBI (Old) and /work/SRC/openSUSE:Factory/.perl-DBI.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "perl-DBI" Mon Sep 4 12:18:31 2017 rev:43 rq:519301 version:1.637 Changes: -------- --- /work/SRC/openSUSE:Factory/perl-DBI/perl-DBI.changes 2016-06-03 16:34:24.000000000 +0200 +++ /work/SRC/openSUSE:Factory/.perl-DBI.new/perl-DBI.changes 2017-09-04 12:18:36.196986480 +0200 @@ -1,0 +2,27 @@ +Fri Aug 18 05:16:23 UTC 2017 - [email protected] + +- updated to 1.637 + see /usr/share/doc/packages/perl-DBI/Changes + + =head2 Changes in DBI 1.637 - ... + + Fix use of externally controlled format string (CWE-134) thanks to pali #44 + This could cause a crash if, for example, a db error contained a %. + https://cwe.mitre.org/data/definitions/134.html + Fix extension detection for DBD::File related drivers + Fix tests for perl without dot in @INC RT#120443 + Fix loss of error message on parent handle, thanks to charsbar #34 + Fix disappearing $_ inside callbacks, thanks to robschaber #47 + + Allow objects to be used as passwords without throwing an error, thanks to demerphq #40 + Allow $sth NAME_* attributes to be set from Perl code, re #45 + Added support for DBD::XMLSimple thanks to nigelhorne #38 + + Documentation updates: + Improve examples using eval to be more correct, thanks to pali #39 + Add cautionary note to prepare_cached docs re refs in %attr #46 + Small POD changes (Getting Help -> Online) thanks to openstrike #33 + Adds links to more module names and fix typo, thanks to oalders #43 + Typo fix thanks to bor #37 + +------------------------------------------------------------------- Old: ---- DBI-1.636.tar.gz New: ---- DBI-1.637.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ perl-DBI.spec ++++++ --- /var/tmp/diff_new_pack.CbRpsL/_old 2017-09-04 12:18:38.088720538 +0200 +++ /var/tmp/diff_new_pack.CbRpsL/_new 2017-09-04 12:18:38.088720538 +0200 @@ -1,7 +1,7 @@ # # spec file for package perl-DBI # -# Copyright (c) 2016 SUSE LINUX GmbH, Nuernberg, Germany. +# Copyright (c) 2017 SUSE LINUX GmbH, Nuernberg, Germany. # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -17,14 +17,14 @@ Name: perl-DBI -Version: 1.636 +Version: 1.637 Release: 0 %define cpan_name DBI Summary: Database independent interface for Perl License: Artistic-1.0 or GPL-1.0+ Group: Development/Libraries/Perl Url: http://search.cpan.org/dist/DBI/ -Source0: http://www.cpan.org/authors/id/T/TI/TIMB/%{cpan_name}-%{version}.tar.gz +Source0: https://cpan.metacpan.org/authors/id/T/TI/TIMB/%{cpan_name}-%{version}.tar.gz Source1: perl-DBI.rpmlintrc Source2: cpanspec.yml BuildRoot: %{_tmppath}/%{name}-%{version}-build @@ -68,6 +68,7 @@ %files -f %{name}.files %defattr(-,root,root,755) -%doc Changes Driver.xst LICENSE README.md +%doc Changes Driver.xst README.md +%license LICENSE %changelog ++++++ DBI-1.636.tar.gz -> DBI-1.637.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBI-1.636/Changes new/DBI-1.637/Changes --- old/DBI-1.636/Changes 2016-04-25 00:01:47.000000000 +0200 +++ new/DBI-1.637/Changes 2017-08-14 00:02:28.000000000 +0200 @@ -6,6 +6,27 @@ =cut +=head2 Changes in DBI 1.637 - ... + + Fix use of externally controlled format string (CWE-134) thanks to pali #44 + This could cause a crash if, for example, a db error contained a %. + https://cwe.mitre.org/data/definitions/134.html + Fix extension detection for DBD::File related drivers + Fix tests for perl without dot in @INC RT#120443 + Fix loss of error message on parent handle, thanks to charsbar #34 + Fix disappearing $_ inside callbacks, thanks to robschaber #47 + + Allow objects to be used as passwords without throwing an error, thanks to demerphq #40 + Allow $sth NAME_* attributes to be set from Perl code, re #45 + Added support for DBD::XMLSimple thanks to nigelhorne #38 + + Documentation updates: + Improve examples using eval to be more correct, thanks to pali #39 + Add cautionary note to prepare_cached docs re refs in %attr #46 + Small POD changes (Getting Help -> Online) thanks to openstrike #33 + Adds links to more module names and fix typo, thanks to oalders #43 + Typo fix thanks to bor #37 + =head2 Changes in DBI 1.636 - 24th April 2016 Fix compilation for threaded perl <= 5.12 broken in 1.635 RT#113955 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBI-1.636/DBI.pm new/DBI-1.637/DBI.pm --- old/DBI-1.636/DBI.pm 2016-04-25 00:03:23.000000000 +0200 +++ new/DBI-1.637/DBI.pm 2017-08-14 10:04:12.000000000 +0200 @@ -11,7 +11,7 @@ require 5.008_001; BEGIN { -our $XS_VERSION = our $VERSION = "1.636"; # ==> ALSO update the version in the pod text below! +our $XS_VERSION = our $VERSION = "1.637"; # ==> ALSO update the version in the pod text below! $VERSION = eval $VERSION; } @@ -122,15 +122,12 @@ =head3 Online StackOverflow has a DBI tag L<http://stackoverflow.com/questions/tagged/dbi> -with over 400 questions. +with over 800 questions. The DBI home page at L<http://dbi.perl.org/> and the DBI FAQ at L<http://faq.dbi-support.com/> may be worth a visit. They include links to other resources, but I<are rather out-dated>. -I don't recommend the DBI cpanforum (at http://www.cpanforum.com/dist/DBI) -because relatively few people read it compared with [email protected]. - =head3 Reporting a Bug If you think you've found a bug then please read @@ -146,7 +143,7 @@ =head2 NOTES -This is the DBI specification that corresponds to DBI version 1.636 +This is the DBI specification that corresponds to DBI version 1.637 (see L<DBI::Changes> for details). The DBI is evolving at a steady pace, so it's good to check that @@ -174,6 +171,7 @@ # The POD text continues at the end of the file. +use Scalar::Util (); use Carp(); use DynaLoader (); use Exporter (); @@ -303,14 +301,6 @@ DBI->trace_msg("DBI connect via $DBI::connect_via in $INC{'Apache/DBI.pm'}\n"); } -# check for weaken support, used by ChildHandles -my $HAS_WEAKEN = eval { - require Scalar::Util; - # this will croak() if this Scalar::Util doesn't have a working weaken(). - Scalar::Util::weaken( \my $test ); # same test as in t/72childhandles.t - 1; -}; - %DBI::installed_drh = (); # maps driver names to installed driver handles sub installed_drivers { %DBI::installed_drh } %DBI::installed_methods = (); # XXX undocumented, may change @@ -385,6 +375,7 @@ wmi_ => { class => 'DBD::WMI', }, x_ => { }, # for private use xbase_ => { class => 'DBD::XBase', }, + xmlsimple_ => { class => 'DBD::XMLSimple', }, xl_ => { class => 'DBD::Excel', }, yaswi_ => { class => 'DBD::Yaswi', }, }; @@ -535,7 +526,6 @@ # End of init code - END { return unless defined &DBI::trace_msg; # return unless bootstrap'd ok local ($!,$?); @@ -616,7 +606,8 @@ DBI->trace_msg(" -> $class->$connect_meth(".join(", ",@args).")\n"); } Carp::croak('Usage: $class->connect([$dsn [,$user [,$passwd [,\%attr]]]])') - if (ref $old_driver or ($attr and not ref $attr) or ref $pass); + if (ref $old_driver or ($attr and not ref $attr) or + (ref $pass and not defined Scalar::Util::blessed($pass))); # extract dbi:driver prefix from $dsn into $1 $dsn =~ s/^dbi:(\w*?)(?:\((.*?)\))?://i @@ -2755,7 +2746,7 @@ will die on a driver installation failure and will only return C<undef> on a connect failure, in which case C<$DBI::errstr> will hold the error message. -Use C<eval { ... }> if you need to catch the "C<install_driver>" error. +Use C<eval> if you need to catch the "C<install_driver>" error. The C<$data_source> argument (with the "C<dbi:...:>" prefix removed) and the C<$username> and C<$password> arguments are then passed to the driver for @@ -3807,23 +3798,24 @@ If you turn C<RaiseError> on then you'd normally turn C<PrintError> off. If C<PrintError> is also on, then the C<PrintError> is done first (naturally). -Typically C<RaiseError> is used in conjunction with C<eval { ... }> -to catch the exception that's been thrown and followed by an -C<if ($@) { ... }> block to handle the caught exception. +Typically C<RaiseError> is used in conjunction with C<eval>, +or a module like L<Try::Tiny> or L<TryCatch>, +to catch the exception that's been thrown and handle it. For example: - eval { + use Try::Tiny; + + try { ... $sth->execute(); ... - }; - if ($@) { + } catch { # $sth->err and $DBI::err will be true if error was from DBI - warn $@; # print the error + warn $_; # print the error (which Try::Tiny puts into $_) ... # do whatever you need to deal with the error - } + }; -In that eval block the $DBI::lasth variable can be useful for +In the catch block the $DBI::lasth variable can be useful for diagnosis and reporting if you can't be sure which handle triggered the error. For example, $DBI::lasth->{Type} and $DBI::lasth->{Statement}. @@ -4597,7 +4589,7 @@ data from the statement. The C<$statement> parameter can be a previously prepared statement handle, in which case the C<prepare> is skipped. -If any method fails, and L</RaiseError> is not set, C<selectrow_array> +If any method fails, and L</RaiseError> is not set, C<selectrow_arrayref> will return undef. @@ -4788,7 +4780,7 @@ stored in a hash associated with the C<$dbh>. If another call is made to C<prepare_cached> with the same C<$statement> and C<%attr> parameter values, then the corresponding cached C<$sth> will be returned without contacting the -database server. +database server. Be sure to understand the cautions and caveats noted below. The C<$if_active> parameter lets you adjust the behaviour if an already cached statement handle is still Active. There are several @@ -4871,6 +4863,12 @@ which will ensure that prepare_cached only returns statements cached by that line of code in that source file. +Also, to ensure the attributes passed are always the same, avoid passing +references inline. For example, the Slice attribute is specified as a +reference. Be sure to declare it external to the call to prepare_cached(), such +that a new hash reference is not created on every call. See L</connect_cached> +for more details and examples. + If you'd like the cache to managed intelligently, you can tie the hashref returned by C<CachedKids> to an appropriate caching module, such as L<Tie::Cache::LRU>: @@ -7251,19 +7249,19 @@ with various types of databases. The recommended way to implement robust transactions in Perl -applications is to use C<RaiseError> and S<C<eval { ... }>> -(which is very fast, unlike S<C<eval "...">>). For example: +applications is to enable L</RaiseError> and catch the error that's 'thrown' as +an exception. For example, using L<Try::Tiny>: + use Try::Tiny; $dbh->{AutoCommit} = 0; # enable transactions, if possible $dbh->{RaiseError} = 1; - eval { + try { foo(...) # do lots of work here bar(...) # including inserts baz(...) # and updates $dbh->commit; # commit the changes if we get this far - }; - if ($@) { - warn "Transaction aborted because $@"; + } catch { + warn "Transaction aborted because $_"; # Try::Tiny copies $@ into $_ # now rollback to undo the incomplete changes # but do it in an eval{} as it may also fail eval { $dbh->rollback }; @@ -7486,18 +7484,23 @@ arrives and then to call alarm($seconds) to schedule an ALRM signal to be delivered $seconds in the future. For example: + my $failed; eval { local $SIG{ALRM} = sub { die "TIMEOUT\n" }; # N.B. \n required eval { alarm($seconds); ... code to execute with timeout here (which may die) ... - }; + 1; + } or $failed = 1; # outer eval catches alarm that might fire JUST before this alarm(0) alarm(0); # cancel alarm (if code ran fast) - die "$@" if $@; - }; - if ( $@ eq "TIMEOUT\n" ) { ... } - elsif ($@) { ... } # some other error + die "$@" if $failed; + 1; + } or $failed = 1; + if ( $failed ) { + if ( defined $@ and $@ eq "TIMEOUT\n" ) { ... } + else { ... } # some other error + } The first (outer) eval is used to avoid the unlikely but possible chance that the "code to execute" dies and the alarm fires before it @@ -7530,17 +7533,20 @@ my $oldaction = POSIX::SigAction->new(); sigaction( SIGALRM, $action, $oldaction ); my $dbh; + my $failed; eval { eval { alarm(5); # seconds before time out $dbh = DBI->connect("dbi:Oracle:$dsn" ... ); - }; + 1; + } or $failed = 1; alarm(0); # cancel alarm (if connect worked fast) - die "$@\n" if $@; # connect died - }; + die "$@\n" if $failed; # connect died + 1; + } or $failed = 1; sigaction( SIGALRM, $oldaction ); # restore original signal handler - if ( $@ ) { - if ($@ eq "connect timeout\n") {...} + if ( $failed ) { + if ( defined $@ and $@ eq "connect timeout\n" ) {...} else { # connect died } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBI-1.636/DBI.xs new/DBI-1.637/DBI.xs --- old/DBI-1.636/DBI.xs 2016-04-24 23:12:16.000000000 +0200 +++ new/DBI-1.637/DBI.xs 2017-08-13 22:48:19.000000000 +0200 @@ -85,10 +85,10 @@ #endif #ifndef warn_sv -static void warn_sv(SV *sv) { dTHX; warn(SvPV_nolen(sv)); } +static void warn_sv(SV *sv) { dTHX; warn("%s", SvPV_nolen(sv)); } #endif #ifndef croak_sv -static void croak_sv(SV *sv) { dTHX; croak(SvPV_nolen(sv)); } +static void croak_sv(SV *sv) { dTHX; croak("%s", SvPV_nolen(sv)); } #endif /* types of method name */ @@ -494,7 +494,7 @@ /* handy for embedding into condition expression for debugging */ /* -static int warn1(char *s) { warn(s); return 1; } +static int warn1(char *s) { warn("%s", s); return 1; } static int dump1(SV *sv) { dTHX; sv_dump(sv); return 1; } */ @@ -736,7 +736,8 @@ parent = DBIc_PARENT_H(imp_xxh); if (parent && SvROK(parent)) { SV *tmp_sv = *hv_fetch((HV*)SvRV(h), "Statement", 9, 1); - (void)hv_store((HV*)SvRV(parent), "Statement", 9, SvREFCNT_inc(tmp_sv), 0); + if (SvOK(tmp_sv)) + (void)hv_store((HV*)SvRV(parent), "Statement", 9, SvREFCNT_inc(tmp_sv), 0); } } @@ -2267,6 +2268,16 @@ ) ) { cacheit = 1; } + /* deal with: NAME_(uc|lc), NAME_hash, NAME_(uc|lc)_hash */ + else if ((keylen==7 || keylen==9 || keylen==12) + && strnEQ(key, "NAME_", 5) + && ( (keylen==9 && strEQ(key, "NAME_hash")) + || ((key[5]=='u' || key[5]=='l') && key[6] == 'c' + && (!key[7] || strnEQ(&key[7], "_hash", 5))) + ) + ) { + cacheit = 1; + } else { /* XXX should really be an event ? */ if (isUPPER(*key)) { char *msg = "Can't set %s->{%s}: unrecognised attribute name or invalid value%s"; @@ -3571,6 +3582,7 @@ && SvROK(*hook_svp) ) { SV *orig_defsv; + SV *temp_defsv; SV *code = SvRV(*hook_svp); I32 skip_dispatch = 0; if (trace_level) @@ -3587,7 +3599,11 @@ */ orig_defsv = DEFSV; /* remember the current $_ */ SAVE_DEFSV; /* local($_) = $method_name */ - DEFSV_set(sv_2mortal(newSVpv(meth_name,0))); + temp_defsv = sv_2mortal(newSVpv(meth_name,0)); +# ifdef SvTEMP_off + SvTEMP_off(temp_defsv); +# endif + DEFSV_set(temp_defsv); EXTEND(SP, items+1); PUSHMARK(SP); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBI-1.636/META.json new/DBI-1.637/META.json --- old/DBI-1.636/META.json 2016-04-25 00:09:37.000000000 +0200 +++ new/DBI-1.637/META.json 2017-08-16 10:45:44.000000000 +0200 @@ -4,7 +4,7 @@ "Tim Bunce ([email protected])" ], "dynamic_config" : 1, - "generated_by" : "ExtUtils::MakeMaker version 7.04, CPAN::Meta::Converter version 2.143240", + "generated_by" : "ExtUtils::MakeMaker version 7.04, CPAN::Meta::Converter version 2.150005", "license" : [ "perl_5" ], @@ -58,7 +58,8 @@ "x_IRC" : "irc://irc.perl.org/#dbi", "x_MailingList" : "mailto:[email protected]" }, - "version" : "1.636", + "version" : "1.637", + "x_serialization_backend" : "JSON::PP version 2.27203", "x_suggests" : { "Clone" : 0.34, "DB_File" : 0, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBI-1.636/META.yml new/DBI-1.637/META.yml --- old/DBI-1.636/META.yml 2016-04-25 00:09:37.000000000 +0200 +++ new/DBI-1.637/META.yml 2017-08-16 10:45:44.000000000 +0200 @@ -16,7 +16,7 @@ DBD::RAM: '0.072' SQL::Statement: '1.33' dynamic_config: 1 -generated_by: 'ExtUtils::MakeMaker version 7.04, CPAN::Meta::Converter version 2.143240' +generated_by: 'ExtUtils::MakeMaker version 7.04, CPAN::Meta::Converter version 2.150005' license: perl meta-spec: url: http://module-build.sourceforge.net/META-spec-v1.4.html @@ -34,7 +34,8 @@ homepage: http://dbi.perl.org/ license: http://dev.perl.org/licenses/ repository: https://github.com/perl5-dbi/dbi -version: '1.636' +version: '1.637' +x_serialization_backend: 'CPAN::Meta::YAML version 0.012' x_suggests: Clone: 0.34 DB_File: 0 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBI-1.636/dbipport.h new/DBI-1.637/dbipport.h --- old/DBI-1.636/dbipport.h 2016-04-22 16:25:43.000000000 +0200 +++ new/DBI-1.637/dbipport.h 2017-08-13 22:48:19.000000000 +0200 @@ -4794,7 +4794,7 @@ PUTBACK; if (croak_on_error && SvTRUE(GvSV(errgv))) - croak(SvPVx(GvSV(errgv), na)); + croak("%s", SvPVx(GvSV(errgv), na)); return sv; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBI-1.636/lib/DBD/File.pm new/DBI-1.637/lib/DBD/File.pm --- old/DBI-1.636/lib/DBD/File.pm 2015-05-26 17:20:06.000000000 +0200 +++ new/DBI-1.637/lib/DBD/File.pm 2016-11-09 11:11:37.000000000 +0100 @@ -593,7 +593,7 @@ } } - # (my $tbl = $file) =~ s/$ext$//i; + # (my $tbl = $file) =~ s/\Q$ext\E$//i; my ($tbl, $basename, $dir, $fn_ext, $user_spec_file, $searchdir); if ($file_is_table and defined $meta->{f_file}) { $tbl = $file; @@ -602,7 +602,7 @@ $user_spec_file = 1; } else { - ($basename, $dir, undef) = File::Basename::fileparse ($file, $ext); + ($basename, $dir, undef) = File::Basename::fileparse ($file, qr{\Q$ext\E}); # $dir is returned with trailing (back)slash. We just need to check # if it is ".", "./", or ".\" or "[]" (VMS) if ($dir =~ m{^(?:[.][/\\]?|\[\])$} && ref $meta->{f_dir_search} eq "ARRAY") { @@ -673,12 +673,12 @@ } @f > 0 && @f <= 2 and $file = $f[0]; !$respect_case && $meta->{sql_identifier_case} == 4 and # XXX SQL_IC_MIXED - ($tbl = $file) =~ s/$ext$//i; + ($tbl = $file) =~ s/\Q$ext\E$//i; my $tmpfn = $file; if ($ext && $req) { # File extension required - $tmpfn =~ s/$ext$//i or return; + $tmpfn =~ s/\Q$ext\E$//i or return; } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBI-1.636/lib/DBI/ProfileData.pm new/DBI-1.637/lib/DBI/ProfileData.pm --- old/DBI-1.636/lib/DBI/ProfileData.pm 2013-06-24 23:03:21.000000000 +0200 +++ new/DBI-1.637/lib/DBI/ProfileData.pm 2017-08-13 22:48:19.000000000 +0200 @@ -56,7 +56,7 @@ =head1 DESCRIPTION This module offers the ability to read, manipulate and format -DBI::ProfileDumper profile data. +L<DBI::ProfileDumper> profile data. Conceptually, a profile consists of a series of records, or nodes, each of each has a set of statistics and set of keys. Each record @@ -116,7 +116,7 @@ If true, the files are deleted after being read. -Actually the files are renamed with a C.deleteme> suffix before being read, +Actually the files are renamed with a C<deleteme> suffix before being read, and then, after reading all the files, they're all deleted together. The files are locked while being read which, combined with the rename, makes it @@ -360,7 +360,7 @@ =head2 $header = $prof->header(); Returns a reference to a hash of header values. These are the key -value pairs included in the header section of the DBI::ProfileDumper +value pairs included in the header section of the L<DBI::ProfileDumper> data format. For example: $header = { @@ -380,7 +380,7 @@ Returns a reference the sorted nodes array. Each element in the array is a single record in the data set. The first seven elements are the -same as the elements provided by DBI::Profile. After that each key is +same as the elements provided by L<DBI::Profile>. After that each key is in a separate element. For example: $nodes = [ @@ -580,7 +580,7 @@ =head2 $Data = $prof->Data() -Returns the same Data hash structure as seen in DBI::Profile. This +Returns the same Data hash structure as seen in L<DBI::Profile>. This structure is not sorted. The nodes() structure probably makes more sense for most analysis. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBI-1.636/t/06attrs.t new/DBI-1.637/t/06attrs.t --- old/DBI-1.636/t/06attrs.t 2014-09-21 14:44:07.000000000 +0200 +++ new/DBI-1.637/t/06attrs.t 2017-08-13 22:48:19.000000000 +0200 @@ -1,6 +1,7 @@ #!perl -w use strict; +use Storable qw(dclone); use Test::More; @@ -255,6 +256,15 @@ cmp_ok($nhash_uc->{CTIME}, '==', 0, '... checking values returned'); cmp_ok($nhash_uc->{NAME}, '==', 1, '... checking values returned'); +unless ($using_autoproxy) { + # set ability to set sth attributes that are usually set internally + for $a (qw(NAME NAME_lc NAME_uc NAME_hash NAME_lc_hash NAME_uc_hash)) { + my $v = $sth->{$a}; + ok(eval { $sth->{$a} = dclone($sth->{$a}) }, "Can set sth $a"); + is_deeply($sth->{$a}, $v, "Can get set sth $a"); + } +} + my $type = $sth->{TYPE}; is(ref($type), 'ARRAY', '... checking type of TYPE attribute for sth'); cmp_ok(scalar(@{$type}), '==', 2, '... checking number of elements returned'); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBI-1.636/t/10examp.t new/DBI-1.637/t/10examp.t --- old/DBI-1.636/t/10examp.t 2016-04-21 16:50:23.000000000 +0200 +++ new/DBI-1.637/t/10examp.t 2017-08-13 22:48:19.000000000 +0200 @@ -14,7 +14,7 @@ require File::Spec; require VMS::Filespec if $^O eq 'VMS'; -use Test::More tests => 238; +use Test::More tests => 242; do { # provide some protection against growth in size of '.' during the test @@ -35,6 +35,31 @@ like($@, qr/install_driver\(NoneSuch\) failed/, '... we should have an exception here'); ok(!$dbh, '... $dbh2 should not be defined'); +{ + my ($error, $tdbh); + eval { + $tdbh = DBI->connect('dbi:ExampleP:', '', []); + } or do { + $error= $@ || "Zombie Error"; + }; + like($error,qr/Usage:/,"connect with unblessed ref password should fail"); + ok(!defined($tdbh), '... $dbh should not be defined'); +} +{ + package Test::Secret; + use overload '""' => sub { return "" }; +} +{ + my ($error,$tdbh); + eval { + $tdbh = DBI->connect('dbi:ExampleP:', '', bless [], "Test::Secret"); + } or do { + $error= $@ || "Zombie Error"; + }; + ok(!$error,"connect with blessed ref password should not fail"); + ok(defined($tdbh), '... $dbh should be defined'); +} + $dbh = DBI->connect('dbi:ExampleP:', '', ''); sub check_connect_cached { @@ -139,7 +164,7 @@ ok("@{[sort keys %{$csr_b->{NAME_uc_hash}}]}" eq "MODE NAME SIZE"); ok("@{[sort values %{$csr_b->{NAME_uc_hash}}]}" eq "0 1 2"); -do "t/lib.pl"; +do "./t/lib.pl"; # get a dir always readable on all platforms #my $dir = getcwd() || cwd(); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBI-1.636/t/49dbd_file.t new/DBI-1.637/t/49dbd_file.t --- old/DBI-1.636/t/49dbd_file.t 2015-05-26 17:20:06.000000000 +0200 +++ new/DBI-1.637/t/49dbd_file.t 2017-08-13 22:48:19.000000000 +0200 @@ -17,7 +17,7 @@ use_ok ("DBI"); use_ok ("DBD::File"); -do "t/lib.pl"; +do "./t/lib.pl"; my $dir = test_dir (); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBI-1.636/t/50dbm_simple.t new/DBI-1.637/t/50dbm_simple.t --- old/DBI-1.636/t/50dbm_simple.t 2013-04-05 00:17:19.000000000 +0200 +++ new/DBI-1.637/t/50dbm_simple.t 2017-08-13 22:48:19.000000000 +0200 @@ -81,7 +81,7 @@ my $dbi_sql_nano = not DBD::DBM::Statement->isa('SQL::Statement'); -do "t/lib.pl"; +do "./t/lib.pl"; my $dir = test_dir (); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBI-1.636/t/51dbm_file.t new/DBI-1.637/t/51dbm_file.t --- old/DBI-1.636/t/51dbm_file.t 2013-06-26 18:43:36.000000000 +0200 +++ new/DBI-1.637/t/51dbm_file.t 2017-08-13 22:48:19.000000000 +0200 @@ -13,7 +13,7 @@ use DBI; -do "t/lib.pl"; +do "./t/lib.pl"; my $dir = test_dir(); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBI-1.636/t/52dbm_complex.t new/DBI-1.637/t/52dbm_complex.t --- old/DBI-1.636/t/52dbm_complex.t 2013-04-05 00:17:19.000000000 +0200 +++ new/DBI-1.637/t/52dbm_complex.t 2017-08-13 22:48:19.000000000 +0200 @@ -93,7 +93,7 @@ plan skip_all => "DBI::SQL::Nano is being used" unless ( $haveSS ); plan skip_all => "Not running with MLDBM" unless ( @mldbm_types ); -do "t/lib.pl"; +do "./t/lib.pl"; my $dir = test_dir (); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBI-1.636/t/53sqlengine_adv.t new/DBI-1.637/t/53sqlengine_adv.t --- old/DBI-1.636/t/53sqlengine_adv.t 2015-05-26 17:20:06.000000000 +0200 +++ new/DBI-1.637/t/53sqlengine_adv.t 2017-08-13 22:48:19.000000000 +0200 @@ -21,7 +21,7 @@ # <[Sno]> what I could do is create a new test case where inserting into a DBD::DBM and after that clone the meta into a DBD::File $dbh # <[Sno]> would that help to get a better picture? -do "t/lib.pl"; +do "./t/lib.pl"; my $dir = test_dir(); my $dbm_dbh = DBI->connect( 'dbi:DBM:', undef, undef, { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBI-1.636/t/70callbacks.t new/DBI-1.637/t/70callbacks.t --- old/DBI-1.636/t/70callbacks.t 2014-09-21 15:57:56.000000000 +0200 +++ new/DBI-1.637/t/70callbacks.t 2017-08-13 22:48:19.000000000 +0200 @@ -27,7 +27,9 @@ ok $dbh->{Callbacks} = { ping => sub { - is $_, 'ping', '$_ holds method name'; + my $m = $_; + is $m, 'ping', '$m holds method name'; + is $_, 'ping', '$_ holds method name (not stolen)'; is @_, 1, '@_ holds 1 values'; is ref $_[0], 'DBI::db', 'first is $dbh'; ok tied(%{$_[0]}), '$dbh is tied (outer) handle' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBI-1.636/t/85gofer.t new/DBI-1.637/t/85gofer.t --- old/DBI-1.636/t/85gofer.t 2013-06-24 23:03:21.000000000 +0200 +++ new/DBI-1.637/t/85gofer.t 2017-08-13 22:48:19.000000000 +0200 @@ -20,7 +20,7 @@ if $ap !~ /policy=pedantic\b/i; } -do "t/lib.pl"; +do "./t/lib.pl"; # 0=SQL::Statement if avail, 1=DBI::SQL::Nano # next line forces use of Nano rather than default behaviour
