Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package perl-DBI for openSUSE:Factory checked in at 2026-07-17 18:47:33 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/perl-DBI (Old) and /work/SRC/openSUSE:Factory/.perl-DBI.new.24530 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "perl-DBI" Fri Jul 17 18:47:33 2026 rev:59 rq:1366351 version:1.651.0 Changes: -------- --- /work/SRC/openSUSE:Factory/perl-DBI/perl-DBI.changes 2026-07-09 22:18:36.656556600 +0200 +++ /work/SRC/openSUSE:Factory/.perl-DBI.new.24530/perl-DBI.changes 2026-07-17 18:48:14.726754393 +0200 @@ -1,0 +2,14 @@ +Wed Jul 15 07:25:08 UTC 2026 - Tina Müller <[email protected]> + +- updated to 1.651.0 (1.651) + see /usr/share/doc/packages/perl-DBI/ChangeLog + + 1.651 - 2026-07-14, H.Merijn Brand & Robert Rothenberg + * Fix inverted comparisons for strings in DBI::SQL::Nano (CVE-2026-15043) bsc#1271399 + * Document that IS NULL matches empty strings in DBI::SQL::Nano + * Fix DBD::File to ensure that the table is not a symlink outside of f_dir (CVE-2026-15392) bsc#1271629 + * Fix an out-of-bounds error when a statement handle has no fields but the source row is not empty (CVE-2026-60082) bsc#1271459 + * Add an overridable upper bound $MAX_PATH_DEPTH for DBI::ProfileData (CVE-2026-60081) bsc#1271458 + * *** WARNING: Next release will require perl-5.12 *** + +------------------------------------------------------------------- Old: ---- DBI-1.650.tgz New: ---- DBI-1.651.tgz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ perl-DBI.spec ++++++ --- /var/tmp/diff_new_pack.H9xVU7/_old 2026-07-17 18:48:15.774789729 +0200 +++ /var/tmp/diff_new_pack.H9xVU7/_new 2026-07-17 18:48:15.786790133 +0200 @@ -18,10 +18,10 @@ %define cpan_name DBI Name: perl-DBI -Version: 1.650.0 +Version: 1.651.0 Release: 0 -# 1.650 -> normalize -> 1.650.0 -%define cpan_version 1.650 +# 1.651 -> normalize -> 1.651.0 +%define cpan_version 1.651 License: Artistic-1.0 OR GPL-1.0-or-later Summary: Database independent interface for Perl URL: https://metacpan.org/release/%{cpan_name} ++++++ DBI-1.650.tgz -> DBI-1.651.tgz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBI-1.650/ChangeLog new/DBI-1.651/ChangeLog --- old/DBI-1.650/ChangeLog 2026-07-06 11:43:59.000000000 +0200 +++ new/DBI-1.651/ChangeLog 2026-07-14 11:25:11.000000000 +0200 @@ -1,3 +1,11 @@ +1.651 - 2026-07-14, H.Merijn Brand & Robert Rothenberg + * Fix inverted comparisons for strings in DBI::SQL::Nano (CVE-2026-15043) + * Document that IS NULL matches empty strings in DBI::SQL::Nano + * Fix DBD::File to ensure that the table is not a symlink outside of f_dir (CVE-2026-15392) + * Fix an out-of-bounds error when a statement handle has no fields but the source row is not empty (CVE-2026-60082) + * Add an overridable upper bound $MAX_PATH_DEPTH for DBI::ProfileData (CVE-2026-60081) + * *** WARNING: Next release will require perl-5.12 *** + 1.650 - 2026-07-06, H.Merijn Brand & Robert Rothenberg * Set a hard limit of 99999 on '?' placeholders (CVE-2026-14739) * Fix out-of-bounds read in preparse of SQL that starts with a comment (CVE-2026-14740) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBI-1.650/DBI.pm new/DBI-1.651/DBI.pm --- old/DBI-1.650/DBI.pm 2026-07-05 13:53:14.000000000 +0200 +++ new/DBI-1.651/DBI.pm 2026-07-13 10:42:52.000000000 +0200 @@ -16,7 +16,7 @@ our ($XS_VERSION, $VERSION); BEGIN { -$VERSION = "1.650"; # ==> ALSO update the version in the pod text below! +$VERSION = "1.651"; # ==> ALSO update the version in the pod text below! $XS_VERSION = $VERSION; $VERSION =~ tr/_//d; } @@ -148,7 +148,7 @@ =head2 NOTES -This is the DBI specification that corresponds to DBI version 1.650 +This is the DBI specification that corresponds to DBI version 1.651 (see L<DBI::Changes> for details). The DBI is evolving at a steady pace, so it's good to check that @@ -405,8 +405,8 @@ common => { # Interface methods common to all DBI handle classes 'DESTROY' => { O=>0x004|0x10000 }, - 'CLEAR' => $keeperr, - 'EXISTS' => $keeperr, + 'CLEAR' => $keeperr, + 'EXISTS' => $keeperr, 'FETCH' => { O=>0x0404 }, 'FETCH_many' => { O=>0x0404 }, 'FIRSTKEY' => $keeperr, @@ -414,12 +414,12 @@ 'STORE' => { O=>0x0418 | 0x4 }, 'DELETE' => { O=>0x0404 }, can => { O=>0x0100 }, # special case, see dispatch - debug => { U =>[1,2,'[$debug_level]'], O=>0x0004 }, # old name for trace - dump_handle => { U =>[1,3,'[$message [, $level]]'], O=>0x0004 }, + debug => { U =>[1,2,'[$debug_level]'], O=>0x0004 }, # old name for trace + dump_handle => { U =>[1,3,'[$message [, $level]]'], O=>0x0004 }, err => $keeperr, errstr => $keeperr, state => $keeperr, - func => { O=>0x0006 }, + func => { O=>0x0006 }, parse_trace_flag => { U =>[2,2,'$name'], O=>0x0404, T=>8 }, parse_trace_flags => { U =>[2,2,'$flags'], O=>0x0404, T=>8 }, private_data => { U =>[1,1], O=>0x0004 }, @@ -441,15 +441,15 @@ db => { # Database Session Class Interface data_sources => { U =>[1,2,'[\%attr]' ], O=>0x0200 }, take_imp_data => { U =>[1,1], O=>0x10000 }, - clone => { U =>[1,2,'[\%attr]'], T=>0x200 }, - connected => { U =>[1,0], O => 0x0004, T=>0x200, H=>3 }, - begin_work => { U =>[1,2,'[ \%attr ]'], O=>0x0400, T=>0x1000 }, - commit => { U =>[1,1], O=>0x0480|0x0800, T=>0x1000 }, - rollback => { U =>[1,1], O=>0x0480|0x0800, T=>0x1000 }, - 'do' => { U =>[2,0,'$statement [, \%attr [, @bind_params ] ]'], O=>0x3200 }, + clone => { U =>[1,2,'[\%attr]'], T=>0x200 }, + connected => { U =>[1,0], O => 0x0004, T=>0x200, H=>3 }, + begin_work => { U =>[1,2,'[ \%attr ]'], O=>0x0400, T=>0x1000 }, + commit => { U =>[1,1], O=>0x0480|0x0800, T=>0x1000 }, + rollback => { U =>[1,1], O=>0x0480|0x0800, T=>0x1000 }, + 'do' => { U =>[2,0,'$statement [, \%attr [, @bind_params ] ]'], O=>0x3200 }, last_insert_id => { U =>[1,6,'[$catalog [,$schema [,$table_name [,$field_name [, \%attr ]]]]]'], O=>0x2800 }, - preparse => { }, # XXX - prepare => { U =>[2,3,'$statement [, \%attr]'], O=>0xA200 }, + preparse => { }, # XXX + prepare => { U =>[2,3,'$statement [, \%attr]'], O=>0xA200 }, prepare_cached => { U =>[2,4,'$statement [, \%attr [, $if_active ] ]'], O=>0xA200 }, selectrow_array => { U =>[2,0,'$statement [, \%attr [, @bind_params ] ]'], O=>0x2000 }, selectrow_arrayref=>{U =>[2,0,'$statement [, \%attr [, @bind_params ] ]'], O=>0x2000 }, @@ -458,11 +458,11 @@ selectall_array =>{U =>[2,0,'$statement [, \%attr [, @bind_params ] ]'], O=>0x2000 }, selectall_hashref=>{ U =>[3,0,'$statement, $keyfield [, \%attr [, @bind_params ] ]'], O=>0x2000 }, selectcol_arrayref=>{U =>[2,0,'$statement [, \%attr [, @bind_params ] ]'], O=>0x2000 }, - ping => { U =>[1,1], O=>0x0404 }, - disconnect => { U =>[1,1], O=>0x0400|0x0800|0x10000, T=>0x200 }, - quote => { U =>[2,3, '$string [, $data_type ]' ], O=>0x0430, T=>2 }, + ping => { U =>[1,1], O=>0x0404 }, + disconnect => { U =>[1,1], O=>0x0400|0x0800|0x10000, T=>0x200 }, + quote => { U =>[2,3, '$string [, $data_type ]' ], O=>0x0430, T=>2 }, quote_identifier=> { U =>[2,6, '$name [, ...] [, \%attr ]' ], O=>0x0430, T=>2 }, - rows => $keeperr, + rows => $keeperr, tables => { U =>[1,6,'$catalog, $schema, $table, $type [, \%attr ]' ], O=>0x2200 }, table_info => { U =>[1,6,'$catalog, $schema, $table, $type [, \%attr ]' ], O=>0x2200|0x8800 }, @@ -488,11 +488,11 @@ execute_array => { U =>[2,0,'\\%attribs [, @args]'], O=>0x1040|0x4000 }, execute_for_fetch => { U =>[2,3,'$fetch_sub [, $tuple_status]'], O=>0x1040|0x4000 }, - fetch => undef, # alias for fetchrow_arrayref + fetch => undef, # alias for fetchrow_arrayref fetchrow_arrayref => undef, fetchrow_hashref => undef, fetchrow_array => undef, - fetchrow => undef, # old alias for fetchrow_array + fetchrow => undef, # old alias for fetchrow_array fetchall_arrayref => { U =>[1,3, '[ $slice [, $max_rows]]'] }, fetchall_hashref => { U =>[2,2,'$key_field'] }, @@ -501,8 +501,8 @@ blob_copy_to_file => { U =>[3,3,'$field, $filename_or_handleref'] }, dump_results => { U =>[1,5,'$maxfieldlen, $linesep, $fieldsep, $filehandle'] }, more_results => { U =>[1,1] }, - finish => { U =>[1,1] }, - cancel => { U =>[1,1], O=>0x0800 }, + finish => { U =>[1,1] }, + cancel => { U =>[1,1], O=>0x0800 }, rows => $keeperr, _get_fbav => undef, @@ -1117,7 +1117,7 @@ return "" if !$diff and $a_desc eq $b_desc; $diff ||= "Strings contain the same sequence of characters" - if length($a); + if length($a); $diff .= "\n" if $diff; return "a: $a_desc\nb: $b_desc\n$diff"; } @@ -1249,7 +1249,7 @@ 'State' => \$h_state_store, # Holder for DBI::state 'Err' => \$h_err_store, # Holder for DBI::err 'Errstr' => \$h_errstr_store, # Holder for DBI::errstr - 'TraceLevel' => 0, + 'TraceLevel' => 0, FetchHashKeyName=> 'NAME', %$initial_attr, }; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBI-1.650/DBI.xs new/DBI-1.651/DBI.xs --- old/DBI-1.650/DBI.xs 2026-07-05 13:53:14.000000000 +0200 +++ new/DBI-1.651/DBI.xs 2026-07-14 08:38:30.000000000 +0200 @@ -5226,6 +5226,9 @@ src_av = (AV*)SvRV(src_rv); src_fields = AvFILL(src_av)+1; if (src_fields != dst_fields) { + if ( dst_fields == 0 ) + croak("_set_fbav(%s): array has %d elements, but the statement handle row buffer has 0", + neatsvpv(src_rv,0), src_fields); warn("_set_fbav(%s): array has %d elements, the statement handle row buffer has %d (and NUM_OF_FIELDS is %d)", neatsvpv(src_rv,0), src_fields, dst_fields, DBIc_NUM_FIELDS(imp_sth)); SvREADONLY_off(dst_av); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBI-1.650/META.json new/DBI-1.651/META.json --- old/DBI-1.650/META.json 2026-07-07 18:42:07.000000000 +0200 +++ new/DBI-1.651/META.json 2026-07-14 11:31:25.000000000 +0200 @@ -53,7 +53,7 @@ "x_IRC" : "irc://irc.perl.org/#dbi", "x_MailingList" : "mailto:[email protected]" }, - "version" : "1.650", + "version" : "1.651", "x_serialization_backend" : "JSON::PP version 4.18", "x_suggests" : { "Clone" : 0.47, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBI-1.650/META.yml new/DBI-1.651/META.yml --- old/DBI-1.650/META.yml 2026-07-07 18:42:07.000000000 +0200 +++ new/DBI-1.651/META.yml 2026-07-14 11:31:25.000000000 +0200 @@ -28,7 +28,7 @@ homepage: http://dbi.perl.org/ license: http://dev.perl.org/licenses/ repository: https://github.com/perl5-dbi/dbi -version: '1.650' +version: '1.651' x_serialization_backend: 'CPAN::Meta::YAML version 0.020' x_suggests: Clone: 0.47 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBI-1.650/dbixs_rev.h new/DBI-1.651/dbixs_rev.h --- old/DBI-1.650/dbixs_rev.h 2026-07-07 18:41:07.000000000 +0200 +++ new/DBI-1.651/dbixs_rev.h 2026-07-14 11:30:26.000000000 +0200 @@ -1,4 +1,4 @@ -/* Tue Jul 7 18:41:07 2026 */ +/* Tue Jul 14 11:30:26 2026 */ #define DBIXS_RELEASE 1 -#define DBIXS_VERSION 650 -#define DBIXS_REVISION 1771 +#define DBIXS_VERSION 651 +#define DBIXS_REVISION 1789 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBI-1.650/lib/DBD/File/Developers.pod new/DBI-1.651/lib/DBD/File/Developers.pod --- old/DBI-1.650/lib/DBD/File/Developers.pod 2026-05-29 11:43:32.000000000 +0200 +++ new/DBI-1.651/lib/DBD/File/Developers.pod 2026-07-13 10:44:58.000000000 +0200 @@ -490,7 +490,7 @@ $class =~ s/::Statement/::Table/; my $flags = { - createMode => $createMode, + createMode => $createMode, lockMode => $lockMode, }; $self->{command} eq "DROP" and $flags->{dropMode} = 1; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBI-1.650/lib/DBD/File.pm new/DBI-1.651/lib/DBD/File.pm --- old/DBI-1.650/lib/DBD/File.pm 2026-07-05 13:53:14.000000000 +0200 +++ new/DBI-1.651/lib/DBD/File.pm 2026-07-14 08:41:35.000000000 +0200 @@ -630,10 +630,10 @@ # Note this triggers only when *used*, not at definition time # $dbh->{csv_tables}{foo}{file} = "/out/side/scope/foo.csv"; # OK # $dbh->do ("create table foo (c char)"); # FAIL + my @bases = map { Cwd::abs_path ($_) } $meta->{f_dir}, @{$meta->{f_dir_search} || []}; if ($searchdir) { my $sd = Cwd::abs_path ($searchdir); - my @sd = map { Cwd::abs_path ($_) } $meta->{f_dir}, @{$meta->{f_dir_search} || []}; - unless (List::Util::first { $_ eq $sd } @sd) { + unless (List::Util::first { $_ eq $sd } @bases) { croak "Using data files in $searchdir is unsafe and not allowed.\nUse f_dir or f_dir_search.\n"; } } @@ -694,6 +694,14 @@ $meta->{f_fqln} = $meta->{f_fqbn} . $meta->{f_lockfile}; $dir && !$user_spec_file and $tbl = File::Spec->catfile ($dir, $tbl); + + if (-l $fqfn) { + my $real = Cwd::abs_path ($fqfn); + unless (List::Util::any { $real =~ m{^\Q$_\E} } @bases) { + croak "Data file $fqfn is a outside of f_dir f_and f_dir_search\n"; + } + } + $meta->{table_name} = $tbl; return $tbl; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBI-1.650/lib/DBD/Proxy.pm new/DBI-1.651/lib/DBD/Proxy.pm --- old/DBI-1.650/lib/DBD/Proxy.pm 2025-01-17 10:46:48.000000000 +0100 +++ new/DBI-1.651/lib/DBD/Proxy.pm 2026-07-13 10:45:06.000000000 +0200 @@ -449,7 +449,7 @@ 'TYPE' => $types, 'cache_filled' => 1 }, - 'proxy_cache_only' => 1, + 'proxy_cache_only' => 1, }); $sth->SUPER::STORE('NUM_OF_FIELDS' => $numFields); $inner->{NAME} = $names; @@ -634,7 +634,7 @@ $sth->SUPER::STORE('Active' => 0); return 0 unless $rsth; # Something's out of sync my $no_finish = exists($sth->{'proxy_no_finish'}) - ? $sth->{'proxy_no_finish'} + ? $sth->{'proxy_no_finish'} : $sth->FETCH('Database')->{'proxy_no_finish'}; unless ($no_finish) { local $SIG{__DIE__} = 'DEFAULT'; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBI-1.650/lib/DBI/Changes.pm new/DBI-1.651/lib/DBI/Changes.pm --- old/DBI-1.650/lib/DBI/Changes.pm 2026-07-07 16:22:56.000000000 +0200 +++ new/DBI-1.651/lib/DBI/Changes.pm 2026-07-14 11:25:37.000000000 +0200 @@ -12,6 +12,36 @@ =encoding UTF-8 +=head2 Changes in DBI 1.651 - 14 Jul 2026 + +=over 2 + +=item * + +Fix inverted comparisons for strings in DBI::SQL::Nano (CVE-2026-15043) + +=item * + +Document that IS NULL matches empty strings in DBI::SQL::Nano + +=item * + +Fix DBD::File to ensure that the table is not a symlink outside of f_dir (CVE-2026-15392) + +=item * + +Fix an out-of-bounds error when a statement handle has no fields but the source row is not empty (CVE-2026-60082) + +=item * + +Add an overridable upper bound $MAX_PATH_DEPTH for DBI::ProfileData (CVE-2026-60081) + +=item * + +*** WARNING: Next release will require perl-5.12 *** + +=back + =head2 Changes in DBI 1.650 - 06 Jul 2026 =over 2 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBI-1.650/lib/DBI/DBD/SqlEngine/HowTo.pod new/DBI-1.651/lib/DBI/DBD/SqlEngine/HowTo.pod --- old/DBI-1.650/lib/DBI/DBD/SqlEngine/HowTo.pod 2026-05-29 11:49:58.000000000 +0200 +++ new/DBI-1.651/lib/DBI/DBD/SqlEngine/HowTo.pod 2026-07-13 10:45:37.000000000 +0200 @@ -105,7 +105,7 @@ $dbh->SUPER::init_valid_attributes (); $dbh->{foo_valid_attrs} = { - foo_version => 1, # contains version of this driver + foo_version => 1, # contains version of this driver foo_valid_attrs => 1, # contains the valid attributes of foo drivers foo_readonly_attrs => 1, # contains immutable attributes of foo drivers foo_bar => 1, # contains the bar attribute @@ -114,7 +114,7 @@ foo_manager_type => 1, # contains the manager class of the driver instance }; $dbh->{foo_readonly_attrs} = { - foo_version => 1, # ensure no-one modifies the driver version + foo_version => 1, # ensure no-one modifies the driver version foo_valid_attrs => 1, # do not permit one to add more valid attributes ... foo_readonly_attrs => 1, # ... or make the immutable mutable foo_manager => 1, # manager is set internally only @@ -205,7 +205,7 @@ $dbh->SUPER::init_valid_attributes (); $dbh->{foo_valid_attrs} = { - foo_version => 1, # contains version of this driver + foo_version => 1, # contains version of this driver foo_valid_attrs => 1, # contains the valid attributes of foo drivers foo_readonly_attrs => 1, # contains immutable attributes of foo drivers foo_bar => 1, # contains the bar attribute @@ -215,7 +215,7 @@ foo_meta => 1, # contains the public interface to modify table meta attributes }; $dbh->{foo_readonly_attrs} = { - foo_version => 1, # ensure no-one modifies the driver version + foo_version => 1, # ensure no-one modifies the driver version foo_valid_attrs => 1, # do not permit one to add more valid attributes ... foo_readonly_attrs => 1, # ... or make the immutable mutable foo_manager => 1, # manager is set internally only diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBI-1.650/lib/DBI/Profile.pm new/DBI-1.651/lib/DBI/Profile.pm --- old/DBI-1.650/lib/DBI/Profile.pm 2026-07-04 14:28:00.000000000 +0200 +++ new/DBI-1.651/lib/DBI/Profile.pm 2026-07-13 10:46:08.000000000 +0200 @@ -739,7 +739,7 @@ push @p, DBIprofile_Statement if $element & 0x02; push @p, DBIprofile_MethodName if $element & 0x04; push @p, DBIprofile_MethodClass if $element & 0x08; - push @p, '!Caller2' if $element & 0x10; + push @p, '!Caller2' if $element & 0x10; push @Path, ($reverse ? reverse @p : @p); } elsif ($element =~ m/^&(\w.*)/) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBI-1.650/lib/DBI/ProfileData.pm new/DBI-1.651/lib/DBI/ProfileData.pm --- old/DBI-1.650/lib/DBI/ProfileData.pm 2025-01-17 10:49:51.000000000 +0100 +++ new/DBI-1.651/lib/DBI/ProfileData.pm 2026-07-14 08:38:30.000000000 +0200 @@ -15,6 +15,8 @@ This module can also be used to roll your own profile analysis: + local $DBI::ProfileData::MAX_PATH_DEPTH = 256; # override the maximum path depth of files + # load data from dbi.prof $prof = DBI::ProfileData->new(File => "dbi.prof"); @@ -78,6 +80,8 @@ use DBI::Profile qw(dbi_profile_merge); +our $MAX_PATH_DEPTH = 256; + # some constants for use with node data arrays sub COUNT () { 0 }; sub TOTAL () { 1 }; @@ -287,6 +291,13 @@ # it's a key my ($key, $index) = ($2, $1 - 1); + # $index comes straight from the (untrusted) profile file; a + # single huge value would expand @path into a giant sparse + # array that is then join()ed and copied per data line, giving + # a tiny-file -> large-memory amplification. Bound it. + croak("Invalid path index at $filename line $.: $1 (You may need to adjust \$MAX_PATH_DEPTH)") + if $index < 0 || $index > $MAX_PATH_DEPTH; + $#path = $index; # truncate path to new length $path[$index] = unescape_key($key); # place new key at end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBI-1.650/lib/DBI/ProxyServer.pm new/DBI-1.651/lib/DBI/ProxyServer.pm --- old/DBI-1.650/lib/DBI/ProxyServer.pm 2025-01-17 11:00:11.000000000 +0100 +++ new/DBI-1.651/lib/DBI/ProxyServer.pm 2026-07-13 10:45:48.000000000 +0200 @@ -46,8 +46,8 @@ { my $o = \%DEFAULT_SERVER_OPTIONS; $o->{'chroot'} = undef, # To be used in the initfile, - # after loading the required - # DBI drivers. + # after loading the required + # DBI drivers. $o->{'clients'} = [ { 'mask' => '.*', 'accept' => 1, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBI-1.650/lib/DBI/PurePerl.pm new/DBI-1.651/lib/DBI/PurePerl.pm --- old/DBI-1.650/lib/DBI/PurePerl.pm 2025-01-17 10:49:51.000000000 +0100 +++ new/DBI-1.651/lib/DBI/PurePerl.pm 2026-07-13 10:45:53.000000000 +0200 @@ -110,7 +110,7 @@ use constant IMA_FUNC_REDIRECT => 0x0002; #/* is $h->func(..., "method")*/ use constant IMA_KEEP_ERR => 0x0004; #/* don't reset err & errstr */ use constant IMA_KEEP_ERR_SUB => 0x0008; #/* '' if in nested call */ -use constant IMA_NO_TAINT_IN => 0x0010; #/* don't check for tainted args*/ +use constant IMA_NO_TAINT_IN => 0x0010; #/* don't check for tainted args*/ use constant IMA_NO_TAINT_OUT => 0x0020; #/* don't taint results */ use constant IMA_COPY_UP_STMT => 0x0040; #/* copy sth Statement to dbh */ use constant IMA_END_WORK => 0x0080; #/* set on commit & rollback */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBI-1.650/lib/DBI/SQL/Nano.pm new/DBI-1.651/lib/DBI/SQL/Nano.pm --- old/DBI-1.650/lib/DBI/SQL/Nano.pm 2025-01-17 10:49:51.000000000 +0100 +++ new/DBI-1.651/lib/DBI/SQL/Nano.pm 2026-07-12 10:27:10.000000000 +0200 @@ -693,8 +693,8 @@ if ( $op eq '>' ) { return $val1 gt $val2; } if ( $op eq '=' ) { return $val1 eq $val2; } if ( $op eq '<>' ) { return $val1 ne $val2; } - if ( $op eq '<=' ) { return $val1 ge $val2; } - if ( $op eq '>=' ) { return $val1 le $val2; } + if ( $op eq '<=' ) { return $val1 le $val2; } + if ( $op eq '>=' ) { return $val1 ge $val2; } } } @@ -928,6 +928,7 @@ * op may be one of: < > >= <= = <> LIKE CLIKE IS * CLIKE is a case insensitive LIKE + * IS NULL matches against NULL and empty strings order_clause ::= column_name [ASC|DESC] * a single column optional ORDER BY clause is supported diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBI-1.650/lib/DBI/W32ODBC.pm new/DBI-1.651/lib/DBI/W32ODBC.pm --- old/DBI-1.650/lib/DBI/W32ODBC.pm 2025-01-17 10:49:51.000000000 +0100 +++ new/DBI-1.651/lib/DBI/W32ODBC.pm 2026-07-13 10:48:14.000000000 +0200 @@ -150,7 +150,7 @@ } sub finish { - shift->Close; ## uncommented this line + shift->Close; ## uncommented this line } # --- @@ -163,11 +163,11 @@ } sub disconnect { - my ($h) = shift; ## this will kill all the statement handles + my ($h) = shift; ## this will kill all the statement handles foreach (@{$h->{'___sths'}}) { ## created for a specific connection - $_->Close if $_->{DSN}; ## - } ## - $h->Close; ## + $_->Close if $_->{DSN}; ## + } ## + $h->Close; ## } sub err { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBI-1.650/lib/Win32/DBIODBC.pm new/DBI-1.651/lib/Win32/DBIODBC.pm --- old/DBI-1.650/lib/Win32/DBIODBC.pm 2025-01-17 10:49:51.000000000 +0100 +++ new/DBI-1.651/lib/Win32/DBIODBC.pm 2026-07-13 10:49:08.000000000 +0200 @@ -33,13 +33,13 @@ my $self= {}; $_=$connect_line; - /^(DSN=)(.*)(;UID=)(.*)(;PWD=)(.*)(;)$/; + /^(DSN=)(.*)(;UID=)(.*)(;PWD=)(.*)(;)$/; - #---- DBI CONNECTION VARIABLES + #---- DBI CONNECTION VARIABLES - $self->{ODBC_DSN}=$2; - $self->{ODBC_UID}=$4; - $self->{ODBC_PWD}=$6; + $self->{ODBC_DSN}=$2; + $self->{ODBC_UID}=$4; + $self->{ODBC_PWD}=$6; #---- DBI CONNECTION VARIABLES $self->{DBI_DBNAME}=$self->{ODBC_DSN}; @@ -61,8 +61,8 @@ #EMU --- $db->Sql('SELECT * FROM DUAL'); sub Sql { - my $self= shift; - my $SQL_statment=shift; + my $self= shift; + my $SQL_statment=shift; # print " SQL : $SQL_statment \n"; @@ -94,7 +94,7 @@ } # [R] provide compatibility with Win32::ODBC's way of identifying erroneous SQL statements - return ($self->{'DBI_ERR'})?1:undef; + return ($self->{'DBI_ERR'})?1:undef; # -[R]- } @@ -102,20 +102,20 @@ #EMU --- $db->FetchRow()) sub FetchRow { - my $self= shift; + my $self= shift; - my $sth=$self->{'DBI_STH'}; - if ($sth) + my $sth=$self->{'DBI_STH'}; + if ($sth) { - my @row=$sth->fetchrow_array; - $self->{'DBI_ROW'}=\@row; + my @row=$sth->fetchrow_array; + $self->{'DBI_ROW'}=\@row; - if (scalar(@row)>0) - { + if (scalar(@row)>0) + { #-- the row of result is not nul #-- return something nothing will be return else return 1; - } + } } return undef; } @@ -137,15 +137,15 @@ #EMU --- %record = $db->DataHash; sub DataHash { - my $self= shift; + my $self= shift; - my $p_name=$self->{'DBI_NAME'}; - my $p_row=$self->{'DBI_ROW'}; + my $p_name=$self->{'DBI_NAME'}; + my $p_row=$self->{'DBI_ROW'}; - my @name=@$p_name; - my @row=@$p_row; + my @name=@$p_name; + my @row=@$p_row; - my %DataHash; + my %DataHash; #print @name; print "\n"; print @row; # [R] new code that seems to work consistent with Win32::ODBC while (@name) @@ -174,23 +174,23 @@ # } # -[R]- - #--- Return Hash - return %DataHash; + #--- Return Hash + return %DataHash; } #EMU --- $db->Error() sub Error { - my $self= shift; + my $self= shift; - if ($self->{'DBI_ERR'} ne '') - { + if ($self->{'DBI_ERR'} ne '') + { #--- Return error message $self->{'DBI_ERRSTR'}; - } + } - #-- else good no error message + #-- else good no error message } # [R] provide compatibility with Win32::ODBC's Close() method. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBI-1.650/t/05concathash.t new/DBI-1.651/t/05concathash.t --- old/DBI-1.650/t/05concathash.t 2013-04-05 08:08:36.000000000 +0200 +++ new/DBI-1.651/t/05concathash.t 2026-07-13 10:46:21.000000000 +0200 @@ -135,7 +135,7 @@ print "\n"; cmpthese(200_000, { - NotNeat => sub {DBI::_concat_hash_sorted( + NotNeat => sub {DBI::_concat_hash_sorted( $simple_hash, "=", ":",1,undef); }, Neat => sub {DBI::_concat_hash_sorted( diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBI-1.650/t/06attrs.t new/DBI-1.651/t/06attrs.t --- old/DBI-1.650/t/06attrs.t 2025-01-17 10:49:51.000000000 +0100 +++ new/DBI-1.651/t/06attrs.t 2026-07-13 10:46:31.000000000 +0200 @@ -101,7 +101,7 @@ is($dbh->state, 'S1000', '... checking $dbh->state'); ok($dbh->{Executed}, '... checking Executed attribute for dbh'); # even though it failed -$dbh->{Executed} = 0; # reset(able) +$dbh->{Executed} = 0; # reset(able) cmp_ok($dbh->{Executed}, '==', 0, '... checking Executed attribute for dbh (after reset)'); cmp_ok($dbh->{ErrCount}, '==', 1, '... checking ErrCount attribute for dbh (after error was generated)'); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBI-1.650/t/50dbm_simple.t new/DBI-1.651/t/50dbm_simple.t --- old/DBI-1.650/t/50dbm_simple.t 2025-01-17 10:49:51.000000000 +0100 +++ new/DBI-1.651/t/50dbm_simple.t 2026-07-12 10:27:10.000000000 +0200 @@ -105,6 +105,18 @@ [ 2, 'apples' ], [ 1, 'oranges' ], ], + "SELECT * FROM fruit WHERE dVal >= 'oranges' ORDER BY dKey", [ + [ 1, 'oranges' ], + [ 5, 'via placeholders' ], + ], + "SELECT * FROM fruit WHERE dVal <= 'oranges' ORDER BY dVal", [ + [ 3, '' ], + [ 2, 'apples' ], + [ 1, 'oranges' ], + ], + "SELECT * FROM fruit WHERE dVal IS NULL", [ + [ 3, '' ], + ], "DELETE FROM fruit", 4, $dbi_sql_nano ? () : ( "SELECT COUNT(*) FROM fruit", [ [ 0 ] ] ), "DROP TABLE fruit", -1, ++++++ _scmsync.obsinfo ++++++ --- /var/tmp/diff_new_pack.H9xVU7/_old 2026-07-17 18:48:16.106800922 +0200 +++ /var/tmp/diff_new_pack.H9xVU7/_new 2026-07-17 18:48:16.110801057 +0200 @@ -1,6 +1,6 @@ -mtime: 1783500980 -commit: 1bc4705c359559d80313214602116acb9f2c015b0b1ab9d5e9c9172e8cdf14de +mtime: 1784277024 +commit: 853faed11c8ba7c3f4f55d4b1d7680908ffc9603390ec6a88fbef15577a3b4d0 url: https://src.opensuse.org/perl/perl-DBI -revision: 1bc4705c359559d80313214602116acb9f2c015b0b1ab9d5e9c9172e8cdf14de +revision: 853faed11c8ba7c3f4f55d4b1d7680908ffc9603390ec6a88fbef15577a3b4d0 projectscmsync: https://src.opensuse.org/perl/_ObsPrj ++++++ build.specials.obscpio ++++++ ++++++ build.specials.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/.gitignore new/.gitignore --- old/.gitignore 1970-01-01 01:00:00.000000000 +0100 +++ new/.gitignore 2026-07-17 10:30:24.000000000 +0200 @@ -0,0 +1 @@ +.osc
