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-09 22:18:24 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/perl-DBI (Old) and /work/SRC/openSUSE:Factory/.perl-DBI.new.1991 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "perl-DBI" Thu Jul 9 22:18:24 2026 rev:58 rq:1364468 version:1.650.0 Changes: -------- --- /work/SRC/openSUSE:Factory/perl-DBI/perl-DBI.changes 2026-06-22 18:05:18.752975252 +0200 +++ /work/SRC/openSUSE:Factory/.perl-DBI.new.1991/perl-DBI.changes 2026-07-09 22:18:36.656556600 +0200 @@ -1,0 +2,22 @@ +Wed Jul 8 08:28:37 UTC 2026 - Tina Müller <[email protected]> + +- updated to 1.650.0 (1.650) + see /usr/share/doc/packages/perl-DBI/ChangeLog + + 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) bsc#1271017 + * Fix code injection via Profile DSN attribute or DBI_PROFILE variable (CVE-2026-14380) bsc#1271018 + * Update dbipport.h to Devel::PPPort-3.73 + * Require Test::More 0.96 (tests will otherwise fail on pristine perl-5.12) + +------------------------------------------------------------------- +Mon Jun 22 10:50:51 UTC 2026 - Tina Müller <[email protected]> + +- updated to 1.649.0 (1.649) + see /usr/share/doc/packages/perl-DBI/ChangeLog + + 1.649 - 2026-06-22, H.Merijn Brand + * Extra Cwd::abs_path required for Windows + +------------------------------------------------------------------- Old: ---- DBI-1.648.tgz New: ---- DBI-1.650.tgz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ perl-DBI.spec ++++++ --- /var/tmp/diff_new_pack.GKMPAt/_old 2026-07-09 22:18:37.352580296 +0200 +++ /var/tmp/diff_new_pack.GKMPAt/_new 2026-07-09 22:18:37.356580432 +0200 @@ -18,10 +18,10 @@ %define cpan_name DBI Name: perl-DBI -Version: 1.648.0 +Version: 1.650.0 Release: 0 -# 1.648 -> normalize -> 1.648.0 -%define cpan_version 1.648 +# 1.650 -> normalize -> 1.650.0 +%define cpan_version 1.650 License: Artistic-1.0 OR GPL-1.0-or-later Summary: Database independent interface for Perl URL: https://metacpan.org/release/%{cpan_name} @@ -32,7 +32,9 @@ BuildRequires: perl BuildRequires: perl-macros BuildRequires: perl(ExtUtils::MakeMaker) >= 6.48 -BuildRequires: perl(Test::Simple) >= 0.90 +BuildRequires: perl(Module::Load) >= 0.22 +BuildRequires: perl(Test::Simple) >= 0.96 +Requires: perl(Module::Load) >= 0.22 Provides: perl(Bundle::DBI) = 12.8.696 Provides: perl(DBD::DBM) = 0.80.0 Provides: perl(DBD::DBM::Statement) @@ -165,6 +167,6 @@ %perl_gen_filelist %files -f %{name}.files -%doc ChangeLog Driver.xst README.md +%doc ChangeLog CONTRIBUTING.md Driver.xst README.md %license LICENSE ++++++ DBI-1.648.tgz -> DBI-1.650.tgz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBI-1.648/CONTRIBUTING.md new/DBI-1.650/CONTRIBUTING.md --- old/DBI-1.648/CONTRIBUTING.md 1970-01-01 01:00:00.000000000 +0100 +++ new/DBI-1.650/CONTRIBUTING.md 2026-07-04 16:24:41.000000000 +0200 @@ -0,0 +1,44 @@ +# How to Contribute + +Help with DBI is always welcome in all areas: code, tests, documentation. +Just reach out to se where we think the pressure point are. + +## Issues + +Bugs and problems can be reported at: + +https://github.com/perl5-dbi/dbi/issues + +## Questions + +Questions about usage can be answered in a number of places: + +### IRC + +You may find helpful people at #dbi on irc.perl.org - people might not be +around the moment you ask the question, but an answer is likely to be given. + +## Testing + +You can help by testing DBI as widely as possible. Running the tests +on a wide variety of platforms in as many configurations as possible (32bit +vs 64-bit, threaded vs non-threaded, big-endian vs lower endian, quadmath, +parallel testing vs single process testing, limited resources vs extreme +resources), database types and versions, DBI versions, and other factors is +a great help in uncovering problems and improving DBI. + +## Code development + +Development happens in a git repo. The canonical location is currently +at https://github.com/perl5-dbi/dbi/ + +Create your own copy of the repo by running: + +git clone https://github.com/perl5-dbi/dbi.git + +## Guides + +### Code style and layout + +This code has long history and was developed by multiple authors. Try to +keep the style of the new or modified code in line with the surrounding code. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBI-1.648/ChangeLog new/DBI-1.650/ChangeLog --- old/DBI-1.648/ChangeLog 2026-06-04 15:46:31.000000000 +0200 +++ new/DBI-1.650/ChangeLog 2026-07-06 11:43:59.000000000 +0200 @@ -1,3 +1,13 @@ +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) + * Fix code injection via Profile DSN attribute or DBI_PROFILE variable (CVE-2026-14380) + * Update dbipport.h to Devel::PPPort-3.73 + * Require Test::More 0.96 (tests will otherwise fail on pristine perl-5.12) + +1.649 - 2026-06-22, H.Merijn Brand + * Extra Cwd::abs_path required for Windows + 1.648 - 2026-06-04, H.Merijn Brand * Correct sprintf usage for trace_msg (issue#132) * Add DBIXS_VERSION & DBIXS_RELEASE to dbixs_rev.h @@ -5,7 +15,7 @@ * Fix possible stack overflow (old issue already noted by Tim) (CVE-2026-9698) * Do not allow table source locations outside explicit given folders * DBD::Sponge PRECISION handling (pr#12, pilcrow) - * Fix possible buffer overflow in preparse + * Fix possible buffer overflow in preparse (CVE-2026-10879) * Skip mismatching .so's (Greg, PR#81) * Fix cast warning in dbi_get_state (Greg, PR#182) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBI-1.648/DBI.pm new/DBI-1.650/DBI.pm --- old/DBI-1.648/DBI.pm 2026-05-28 14:03:15.000000000 +0200 +++ new/DBI-1.650/DBI.pm 2026-07-05 13:53:14.000000000 +0200 @@ -16,7 +16,7 @@ our ($XS_VERSION, $VERSION); BEGIN { -$VERSION = "1.648"; # ==> ALSO update the version in the pod text below! +$VERSION = "1.650"; # ==> 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.648 +This is the DBI specification that corresponds to DBI version 1.650 (see L<DBI::Changes> for details). The DBI is evolving at a steady pace, so it's good to check that @@ -7137,7 +7137,8 @@ It is possible that the keys in the hash returned by C<ParamValues> are not exactly the same as those implied by the prepared statement. For example, DBD::Oracle translates 'C<?>' placeholders into 'C<:pN>' -where N is a sequence number starting at 1. +where N is a sequence number starting at C<1> with a hard limit of +C<99999>. * Values: @@ -7239,7 +7240,8 @@ It is also possible that the keys in the hash returned by C<ParamArrays> are not exactly the same as those implied by the prepared statement. For example, DBD::Oracle translates 'C<?>' -placeholders into 'C<:pN>' where N is a sequence number starting at 1. +placeholders into 'C<:pN>' where N is a sequence number starting at +C<1> with a hard limit of C<99999>. =head3 C<RowsInCache> @@ -8342,8 +8344,10 @@ =head1 ACKNOWLEDGEMENTS +The creator: Tim Bunce! + I would like to acknowledge the valuable contributions of the many -people I have worked with on the DBI project, especially in the early +people Tim has worked with on the DBI project, especially in the early years (1992-1994). In no particular order: Kevin Stock, Buzz Moschetti, Kurt Andersen, Ted Lemon, William Hails, Garth Kennedy, Michael Peppler, Neil S. Briscoe, Jeff Urlwin, David J. Hughes, Jeff Stander, @@ -8371,12 +8375,16 @@ The development of DBD::Gofer and related modules was sponsored by Shopzilla.com (L<https::connexity.com>). +After the release of version 1.643, the development was lead by H.Merijn Brand +with the help of the DBI team. Thanks to all that added issues, did Pull +Requests or helped in any way to keep the DBI healthy. + =head1 CONTRIBUTING As you can see above, many people have contributed to the DBI and drivers in many ways over many years. -If you'd like to help then see L<http://dbi.perl.org/contributing>. +If you'd like to help then see F<CONTRIBUTING.md>. If you'd like the DBI to do something new or different then a good way to make that happen is to do it yourself and send me a patch to the diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBI-1.648/DBI.xs new/DBI-1.650/DBI.xs --- old/DBI-1.648/DBI.xs 2026-05-28 14:05:15.000000000 +0200 +++ new/DBI-1.650/DBI.xs 2026-07-05 13:53:14.000000000 +0200 @@ -4203,7 +4203,14 @@ } /* XXX this allocation strategy won't work when we get to more advanced stuff */ - new_stmt_sv = newSV(strlen(statement) * 6 + 16); + /* The 7 is for length increase from '?' (length 1) to :p99999 (length 7) + * which imposes a limit of 99999 '?' placeholders POSIX style. Actual counts + * are a bit higher: + * using factor 5: :p1 .. :p1107 + * using factor 6: :p1 .. :p11106 + * using factor 7: :p1 .. :p111105 + * and that count is insane already */ + new_stmt_sv = newSV(strlen(statement) * 7 + 16); sv_setpv(new_stmt_sv,""); src = statement; dest = SvPVX(new_stmt_sv); @@ -4232,7 +4239,13 @@ } if (in_comment == '/') src++; - src += (*src != '\n' || *(dest-1)=='\n') ? 1 : 0; + /* Only inspect the previously-emitted byte if one exists; + when an initial line comment is deleted, dest is still at + the start of the output buffer and *(dest-1) would read + one byte before it (OOB read). */ + src += (*src != '\n' + || (dest > SvPVX(new_stmt_sv) && *(dest-1)=='\n')) + ? 1 : 0; in_comment = '\0'; rt_comment = '\0'; } @@ -4342,9 +4355,9 @@ continue; } - if ( !(*src==':' && (PS_accept(DBIpp_ph_cn) || PS_accept(DBIpp_ph_cs))) - && !(*src=='?' && PS_accept(DBIpp_ph_qm)) - ){ + if ( !(*src==':' && (PS_accept(DBIpp_ph_cn) || PS_accept(DBIpp_ph_cs))) + && !(*src=='?' && PS_accept(DBIpp_ph_qm)) + ){ if (*src == '\'' || *src == '"') in_quote = *src; *dest++ = *src++; @@ -4363,12 +4376,18 @@ if (PS_return(DBIpp_ph_qm)) ; else if (PS_return(DBIpp_ph_cn)) { /* '?' -> ':p1' (etc) */ + if (idx >= 99999) { + char buf[99]; + sprintf(buf, "preparse found more than 99999 '?' placeholders. Limit exceeded."); + set_err_char(dbh, imp_xxh, "1", 1, buf, 0, "preparse"); + return &PL_sv_undef; + } sprintf(start,":p%d", idx++); dest = start+strlen(start); } else if (PS_return(DBIpp_ph_sp)) { /* '?' -> '%s' */ - *start = '%'; - *dest++ = 's'; + *start = '%'; + *dest++ = 's'; } } else if (isDIGIT(*src)) { /* :1 */ @@ -4376,24 +4395,24 @@ style = ":1"; if (PS_return(DBIpp_ph_cn)) { /* ':1'->':p1' */ - idx = pln; - *dest++ = 'p'; - while(isDIGIT(*src)) - *dest++ = *src++; + idx = pln; + *dest++ = 'p'; + while(isDIGIT(*src)) + *dest++ = *src++; } else if (PS_return(DBIpp_ph_qm) /* ':1' -> '?' */ || PS_return(DBIpp_ph_sp) /* ':1' -> '%s' */ ) { - PS_return(DBIpp_ph_qm) ? sprintf(start,"?") : sprintf(start,"%%s"); - dest = start + strlen(start); - if (pln != idx) { - char buf[99]; - sprintf(buf, "preparse found placeholder :%d out of sequence, expected :%d", pln, idx); - set_err_char(dbh, imp_xxh, "1", 1, buf, 0, "preparse"); - return &PL_sv_undef; - } - while(isDIGIT(*src)) src++; - idx++; + PS_return(DBIpp_ph_qm) ? sprintf(start,"?") : sprintf(start,"%%s"); + dest = start + strlen(start); + if (pln != idx) { + char buf[99]; + sprintf(buf, "preparse found placeholder :%d out of sequence, expected :%d", pln, idx); + set_err_char(dbh, imp_xxh, "1", 1, buf, 0, "preparse"); + return &PL_sv_undef; + } + while(isDIGIT(*src)) src++; + idx++; } } else if (isALNUM(*src)) /* :name */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBI-1.648/MANIFEST new/DBI-1.650/MANIFEST --- old/DBI-1.648/MANIFEST 2026-06-04 16:03:52.000000000 +0200 +++ new/DBI-1.650/MANIFEST 2026-07-07 18:42:07.000000000 +0200 @@ -11,6 +11,7 @@ cpanfile Perl.xs Test harness (currently) for Driver.xst README.md +CONTRIBUTING.md dbd_xsh.h Prototypes for standard Driver.xst interface dbi_sql.h Definitions based on SQL CLI / ODBC (#inc'd by DBIXS.h) dbipport.h Perl portability macros (from Devel::PPort) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBI-1.648/META.json new/DBI-1.650/META.json --- old/DBI-1.648/META.json 2026-06-04 16:03:52.000000000 +0200 +++ new/DBI-1.650/META.json 2026-07-07 18:42:07.000000000 +0200 @@ -23,7 +23,7 @@ "build" : { "requires" : { "ExtUtils::MakeMaker" : "6.48", - "Test::Simple" : "0.90" + "Test::Simple" : "0.96" } }, "configure" : { @@ -33,6 +33,7 @@ }, "runtime" : { "requires" : { + "Module::Load" : "0.22", "perl" : "5.008001" } } @@ -52,7 +53,7 @@ "x_IRC" : "irc://irc.perl.org/#dbi", "x_MailingList" : "mailto:[email protected]" }, - "version" : "1.648", + "version" : "1.650", "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.648/META.yml new/DBI-1.650/META.yml --- old/DBI-1.648/META.yml 2026-06-04 16:03:52.000000000 +0200 +++ new/DBI-1.650/META.yml 2026-07-07 18:42:07.000000000 +0200 @@ -4,7 +4,7 @@ - 'DBI team ([email protected])' build_requires: ExtUtils::MakeMaker: '6.48' - Test::Simple: '0.90' + Test::Simple: '0.96' configure_requires: ExtUtils::MakeMaker: '0' dynamic_config: 1 @@ -19,6 +19,7 @@ - t - inc requires: + Module::Load: '0.22' perl: '5.008001' resources: IRC: irc://irc.perl.org/#dbi @@ -27,7 +28,7 @@ homepage: http://dbi.perl.org/ license: http://dev.perl.org/licenses/ repository: https://github.com/perl5-dbi/dbi -version: '1.648' +version: '1.650' 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.648/Makefile.PL new/DBI-1.650/Makefile.PL --- old/DBI-1.648/Makefile.PL 2026-06-01 11:07:39.000000000 +0200 +++ new/DBI-1.650/Makefile.PL 2026-07-06 11:13:34.000000000 +0200 @@ -62,7 +62,10 @@ MIN_PERL_VERSION => "5.008001", BUILD_REQUIRES => { "ExtUtils::MakeMaker" => "6.48", - "Test::Simple" => "0.90", + "Test::Simple" => "0.96", + }, + PREREQ_PM => { + "Module::Load" => 0.22, }, META_MERGE => { resources => { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBI-1.648/cpanfile new/DBI-1.650/cpanfile --- old/DBI-1.648/cpanfile 2024-12-31 15:26:00.000000000 +0100 +++ new/DBI-1.650/cpanfile 2026-07-06 11:13:34.000000000 +0200 @@ -1,22 +1,23 @@ requires "XSLoader"; +requires "Module::Load" => "0.22"; -recommends "Encode" => "3.21"; +recommends "Encode" => "3.24"; -suggests "Clone" => "0.47"; +suggests "Clone" => "0.50"; suggests "DB_File"; suggests "MLDBM"; -suggests "Net::Daemon"; +suggests "Net::Daemon" => "0.52"; suggests "RPC::PlServer" => "0.2020"; suggests "SQL::Statement" => "1.414"; on "configure" => sub { - requires "ExtUtils::MakeMaker" => "6.48"; + requires "ExtUtils::MakeMaker" => "6.48"; - recommends "ExtUtils::MakeMaker" => "7.70"; + recommends "ExtUtils::MakeMaker" => "7.78"; }; on "test" => sub { - requires "Test::More" => "0.90"; + requires "Test::More" => "0.96"; - recommends "Test::More" => "1.302207"; + recommends "Test::More" => "1.302222"; }; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBI-1.648/dbipport.h new/DBI-1.650/dbipport.h --- old/DBI-1.648/dbipport.h 2024-12-31 15:37:02.000000000 +0100 +++ new/DBI-1.650/dbipport.h 2026-07-05 11:34:27.000000000 +0200 @@ -4,9 +4,9 @@ /* ---------------------------------------------------------------------- - dbipport.h -- Perl/Pollution/Portability Version 3.72 + dbipport.h -- Perl/Pollution/Portability Version 3.73 - Automatically created by Devel::PPPort running under perl 5.040000. + Automatically created by Devel::PPPort running under perl 5.042002. Do NOT edit this file directly! -- Edit PPPort_pm.PL and the includes in parts/inc/ instead. @@ -21,7 +21,7 @@ =head1 NAME -dbipport.h - Perl/Pollution/Portability version 3.72 +dbipport.h - Perl/Pollution/Portability version 3.73 =head1 SYNOPSIS @@ -302,6 +302,7 @@ sv_setpvf_mg() NEED_sv_setpvf_mg NEED_sv_setpvf_mg_GLOBAL sv_setpvf_mg_nocontext() NEED_sv_setpvf_mg_nocontext NEED_sv_setpvf_mg_nocontext_GLOBAL sv_unmagicext() NEED_sv_unmagicext NEED_sv_unmagicext_GLOBAL + sv_vstring_get() NEED_sv_vstring_get NEED_sv_vstring_get_GLOBAL utf8_to_uvchr_buf() NEED_utf8_to_uvchr_buf NEED_utf8_to_uvchr_buf_GLOBAL vload_module() NEED_vload_module NEED_vload_module_GLOBAL vmess() NEED_vmess NEED_vmess_GLOBAL @@ -588,7 +589,7 @@ # Disable broken TRIE-optimization BEGIN { eval '${^RE_TRIE_MAXBUF} = -1' if "$]" >= "5.009004" && "$]" <= "5.009005"} -my $VERSION = 3.72; +my $VERSION = 3.73; my %opt = ( quiet => 0, @@ -7089,6 +7090,7 @@ Perl_sqrt|5.006000|5.006000|n PERL_STACK_OFFSET_DEFINED|||piu PERL_STACK_OVERFLOW_CHECK|5.006000||Viu +PERL_STACK_REALIGN|||piu PERL_STATIC_FORCE_INLINE|5.031011||Viu PERL_STATIC_FORCE_INLINE_NO_RET|5.031011||Viu PERL_STATIC_INLINE|5.013004|5.013004|poVn @@ -9445,7 +9447,7 @@ sv_ref|5.023005|5.023005| SvREFCNT|5.003007|5.003007| SvREFCNT_dec|5.003007|5.003007| -SvREFCNT_dec_NN|5.017007|5.017007| +SvREFCNT_dec_NN|5.017007|5.017007|p SvREFCNT_IMMORTAL|5.017008||Viu SvREFCNT_inc|5.003007|5.003007|pn SvREFCNT_inc_NN|5.009004|5.003007|pn @@ -9631,11 +9633,13 @@ sv_vcatpvf_mg|5.006000|5.004000|p sv_vcatpvfn|5.004000|5.004000| sv_vcatpvfn_flags|5.017002|5.017002| -SvVOK|5.008001|5.008001| +SvVOK|5.008001|5.008001|p sv_vsetpvf|5.006000|5.004000|p sv_vsetpvf_mg|5.006000|5.004000|p sv_vsetpvfn|5.004000|5.004000| +sv_vstring_get|||p SvVSTRING_mg|5.009004|5.003007|p +SvVSTRING|||piu SvWEAKREF|5.006000||Viu SvWEAKREF_off|5.006000||Viu SvWEAKREF_on|5.006000||Viu @@ -12513,6 +12517,19 @@ #endif #endif + +/* work around a stack alignment bug in 32-bit GCC on Windows */ +#if defined(WIN32) && !defined(WIN64) && defined(__GNUC__) +#ifndef PERL_STACK_REALIGN +# define PERL_STACK_REALIGN __attribute__((force_align_arg_pointer)) +#endif + +#else +#ifndef PERL_STACK_REALIGN +# define PERL_STACK_REALIGN +#endif + +#endif #ifndef cBOOL # define cBOOL(cbool) ((cbool) ? (bool)1 : (bool)0) #endif @@ -15932,6 +15949,11 @@ (void)((PL_Sv=(SV*)(sv)) ? ++(SvREFCNT(PL_Sv)) : 0) # endif #endif + +/* not as efficient as the real thing, but it works */ +#ifndef SvREFCNT_dec_NN +# define SvREFCNT_dec_NN(sv) SvREFCNT_dec(sv) +#endif #ifndef SvREFCNT_inc_simple_void # define SvREFCNT_inc_simple_void(sv) STMT_START { if (sv) SvREFCNT(sv)++; } STMT_END #endif @@ -16595,6 +16617,49 @@ #endif #endif +#ifndef SvVSTRING +# define SvVSTRING(sv, len) (sv_vstring_get(sv, &(len))) +#endif + +#ifndef SvVOK +# define SvVOK(sv) (FALSE) +#endif + +#if !defined(sv_vstring_get) + +#if defined(NEED_sv_vstring_get) +static const char * DPPP_(my_sv_vstring_get)(pTHX_ SV * sv, STRLEN * lenp); +static +#else +extern const char * DPPP_(my_sv_vstring_get)(pTHX_ SV * sv, STRLEN * lenp); +#endif + +#if defined(NEED_sv_vstring_get) || defined(NEED_sv_vstring_get_GLOBAL) + +#ifdef sv_vstring_get +# undef sv_vstring_get +#endif +#define sv_vstring_get(a,b) DPPP_(my_sv_vstring_get)(aTHX_ a,b) +#define Perl_sv_vstring_get DPPP_(my_sv_vstring_get) + + +const char * +DPPP_(my_sv_vstring_get)(pTHX_ SV *sv, STRLEN *lenp) +{ +#ifdef SvVSTRING_mg + MAGIC *mg = SvVSTRING_mg(sv); + if (!mg) return NULL; + + if (lenp) *lenp = mg->mg_len; + return mg->mg_ptr; +#else + return NULL; +#endif +} + +#endif + +#endif #ifdef USE_ITHREADS #ifndef CopFILE diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBI-1.648/dbixs_rev.h new/DBI-1.650/dbixs_rev.h --- old/DBI-1.648/dbixs_rev.h 2026-06-04 16:02:44.000000000 +0200 +++ new/DBI-1.650/dbixs_rev.h 2026-07-07 18:41:07.000000000 +0200 @@ -1,4 +1,4 @@ -/* Thu Jun 4 16:02:44 2026 */ +/* Tue Jul 7 18:41:07 2026 */ #define DBIXS_RELEASE 1 -#define DBIXS_VERSION 648 -#define DBIXS_REVISION 1746 +#define DBIXS_VERSION 650 +#define DBIXS_REVISION 1771 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBI-1.648/lib/DBD/File/Roadmap.pod new/DBI-1.650/lib/DBD/File/Roadmap.pod --- old/DBI-1.648/lib/DBD/File/Roadmap.pod 2013-04-05 08:08:36.000000000 +0200 +++ new/DBI-1.650/lib/DBD/File/Roadmap.pod 2026-07-04 16:26:36.000000000 +0200 @@ -152,7 +152,7 @@ =head1 RESOURCES AND CONTRIBUTIONS -See L<http://dbi.perl.org/contributing> for I<how you can help>. +See F<CONTRIBUTING.md> for I<how you can help>. If your company has benefited from DBI, please consider if it could make a donation to The Perl Foundation "DBI Development" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBI-1.648/lib/DBD/File.pm new/DBI-1.650/lib/DBD/File.pm --- old/DBI-1.648/lib/DBD/File.pm 2026-05-29 11:47:08.000000000 +0200 +++ new/DBI-1.650/lib/DBD/File.pm 2026-07-05 13:53:14.000000000 +0200 @@ -630,8 +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 @sd = map { Cwd::abs_path ($_) } $meta->{f_dir}, @{$meta->{f_dir_search} || []}; - unless (List::Util::first { $_ eq $searchdir } @sd) { + 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) { croak "Using data files in $searchdir is unsafe and not allowed.\nUse f_dir or f_dir_search.\n"; } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBI-1.648/lib/DBI/Changes.pm new/DBI-1.650/lib/DBI/Changes.pm --- old/DBI-1.648/lib/DBI/Changes.pm 2026-06-04 15:46:45.000000000 +0200 +++ new/DBI-1.650/lib/DBI/Changes.pm 2026-07-07 16:22:56.000000000 +0200 @@ -12,6 +12,42 @@ =encoding UTF-8 +=head2 Changes in DBI 1.650 - 06 Jul 2026 + +=over 2 + +=item * + +Set a hard limit of 99999 on '?' placeholders (CVE-2026-14739) + +=item * + +Fix out-of-bounds read in preparse of SQL that starts with a comment (CVE-2026-14740) + +=item * + +Fix code injection via Profile DSN attribute or DBI_PROFILE variable (CVE-2026-14380) + +=item * + +Update dbipport.h to Devel::PPPort-3.73 + +=item * + +Require Test::More 0.96 (tests will otherwise fail on pristine perl-5.12) + +=back + +=head2 Changes in DBI 1.649 - 22 Jun 2026 + +=over 2 + +=item * + +Extra Cwd::abs_path required for Windows + +=back + =head2 Changes in DBI 1.648 - 04 Jun 2026 =over 2 @@ -42,7 +78,7 @@ =item * -Fix possible buffer overflow in preparse +Fix possible buffer overflow in preparse (CVE-2026-10879) =item * diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBI-1.648/lib/DBI/Profile.pm new/DBI-1.650/lib/DBI/Profile.pm --- old/DBI-1.648/lib/DBI/Profile.pm 2025-01-17 10:56:44.000000000 +0100 +++ new/DBI-1.650/lib/DBI/Profile.pm 2026-07-04 14:28:00.000000000 +0200 @@ -679,6 +679,7 @@ use Exporter (); use UNIVERSAL (); use Carp; +use Module::Load (); use DBI qw(dbi_time dbi_profile dbi_profile_merge_nodes dbi_profile_merge); @@ -758,7 +759,9 @@ } } - eval "require $package" if $package; # silently ignores errors + eval { + Module::Load::load $package if $package; # silently ignores errors + }; $package ||= $class; return $package->new(Path => \@Path, @args); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBI-1.648/t/40profile.t new/DBI-1.650/t/40profile.t --- old/DBI-1.648/t/40profile.t 2025-01-17 10:49:51.000000000 +0100 +++ new/DBI-1.650/t/40profile.t 2026-07-06 11:13:34.000000000 +0200 @@ -31,7 +31,7 @@ if $Config{osvers} =~ /xen/ # eg 2.6.18-4-xen-amd64 and $ENV{AUTOMATED_TESTING}; - plan tests => 60; + plan tests => 61; } $Data::Dumper::Indent = 1; @@ -458,8 +458,51 @@ 'merged time foo/bar'); is($total_time, 2.93, 'merged nodes foo/bar time'); +subtest "CVE-2026-14380" => sub { + + plan tests => 3; + + { + my $marker = sprintf('dbi-test-payload-%1.6f-%u-%u-%u', $], time, $$, 1); + local $ENV{DBI_PROFILE} = payload_for($marker); + my $dbh = eval { + DBI->connect("dbi:Sponge:", "", "", { RaiseError => 0 }) + }; + ok !( -e "/tmp/$marker" ), "ENV DBI_PROFILE payload"; + unlink "/tmp/$marker" if -e "/tmp/$marker"; + } + + { + my $marker = sprintf('dbi-test-payload-%1.6f-%u-%u-%u', $], time, $$, 2); + my $dbh = DBI->connect("dbi:Sponge:", "", "", { RaiseError => 0 }); + eval { + $dbh->{Profile} = payload_for($marker); + }; + ok !( -e "/tmp/$marker" ), "Set Profile payload"; + unlink "/tmp/$marker" if -e "/tmp/$marker"; + } + + { + my $marker = sprintf('dbi-test-payload-%1.6f-%u-%u-%u', $], time, $$, 3); + my $payload = payload_for($marker); + my $dsn = "dbi:Sponge(Profile=>$payload):"; + my $dbh = eval { + DBI->connect($dsn, "", "", { RaiseError => 0 }) + }; + ok !( -e "/tmp/$marker" ), "DSN payload"; + unlink "/tmp/$marker" if -e "/tmp/$marker"; + } + +}; + exit 0; +sub payload_for { + my ($marker) = @_; + # Single-quoted q{...} so \x2f is literal backslash-x-2-f for split; + # the inner qq(...) re-interprets \x2f = / at eval-time. + return qq{2/system(qq(touch \\x2ftmp\\x2f$marker))}; +} sub sanitize_tree { my $data = shift; ++++++ _scmsync.obsinfo ++++++ --- /var/tmp/diff_new_pack.GKMPAt/_old 2026-07-09 22:18:37.688591734 +0200 +++ /var/tmp/diff_new_pack.GKMPAt/_new 2026-07-09 22:18:37.692591871 +0200 @@ -1,6 +1,6 @@ -mtime: 1781867574 -commit: 4f3462514de002ae278bc37504cda55f5f275a7ea307c189a0ebd54824345e94 +mtime: 1783500980 +commit: 1bc4705c359559d80313214602116acb9f2c015b0b1ab9d5e9c9172e8cdf14de url: https://src.opensuse.org/perl/perl-DBI -revision: 4f3462514de002ae278bc37504cda55f5f275a7ea307c189a0ebd54824345e94 +revision: 1bc4705c359559d80313214602116acb9f2c015b0b1ab9d5e9c9172e8cdf14de 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-08 10:56:20.000000000 +0200 @@ -0,0 +1 @@ +.osc
