Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

[perl5-dbi/dbi] ea99b6: Fix memory corruption in XS functions when Perl st...

1 view
Skip to first unread message

Tim Bunce

unread,
Aug 25, 2019, 2:15:03 AM8/25/19
to dbi...@perl.org
Branch: refs/heads/master
Home: https://github.com/perl5-dbi/dbi
Commit: ea99b6aafb437db53c28fd40d5eafbe119cd66e1
https://github.com/perl5-dbi/dbi/commit/ea99b6aafb437db53c28fd40d5eafbe119cd66e1
Author: Pali <pa...@cpan.org>
Date: 2019-07-31 (Wed, 31 Jul 2019)

Changed paths:
M DBI.xs
M Driver.xst

Log Message:
-----------
Fix memory corruption in XS functions when Perl stack is reallocated

Macro ST(*) returns pointer to Perl stack. Other Perl functions which use
Perl stack (e.g. eval) may reallocate Perl stack and therefore pointer
returned by ST(*) macro is invalid.

Construction like this:

ST(0) = dbd_db_login6_sv(dbh, imp_dbh, dbname, username, password, attribs) ? &PL_sv_yes : &PL_sv_no;

where dbd_db_login6_sv() driver function calls eval may lead to
reallocating Perl stack and therefore invalidating ST(0) pointer.
So that construction would cause memory corruption as left part of
assignment is resolved prior executing dbd_db_login6_sv() function.

Correct way how to handle this problem: First call dbd_db_login6_sv()
function and then call ST(0) to retrieve stack pointer.

In this patch are fixes all occurrences of such constructions.

When running perl under valgrind I got memory corruption in DBD::ODBC
driver in that dbd_db_login6_sv() function due to above problem.

Exactly same problem was present in Encode module which was fixed in pull
request: https://github.com/dankogai/p5-encode/pull/72


Commit: 2c335f308ee25ee811d386f04929c614302de4c9
https://github.com/perl5-dbi/dbi/commit/2c335f308ee25ee811d386f04929c614302de4c9
Author: Tim Bunce <Tim....@pobox.com>
Date: 2019-08-22 (Thu, 22 Aug 2019)

Changed paths:
M DBI.xs
M Driver.xst

Log Message:
-----------
Merge pull request #85 from pali/master

Fix memory corruption in XS functions when Perl stack is reallocated


Compare: https://github.com/perl5-dbi/dbi/compare/eaf547a5696b...2c335f308ee2
0 new messages