Branch: refs/heads/master
  Home:   https://github.com/perl5-dbi/dbi
  Commit: b34f9c564a3a12e3530ba1c6864aa13cff94b62c
      
https://github.com/perl5-dbi/dbi/commit/b34f9c564a3a12e3530ba1c6864aa13cff94b62c
  Author: Lukas Mai <lukasmai....@gmail.com>
  Date:   2024-08-10 (Sat, 10 Aug 2024)

  Changed paths:
    M DBI.xs
    M t/70callbacks.t

  Log Message:
  -----------
  don't leak $_ after callback execution

The code responsible for executing callbacks (as in the $h->{Callbacks}
feature) saves a copy of *_{SCALAR} (that is, the scalar slot of the *_
typeglob), replaces it with a reference to a temporary scalar
(containing the name of the method being called), invokes the callback,
and then restores the old *_{SCALAR}. This works like manually
localizing (and then unlocalizing) $_.

However, before restoring the old $_, the code would increment its
reference count "to compensate for the ref count decrement that will
happen when we exit the scope". As far as I can tell, this never made
any sense: $_ is a global variable and we never decrement its reference
count. All this did is increment the reference count of $_ for no
reason. This was usually harmless: $_ is a global variable anyway. But
if $_ is localized (explicitly or by 'for (...)') when a callback runs,
the local value of $_ would leak.

Fix the leak by removing the spurious SvREFCNT_inc.

Fixes RT#144526.


  Commit: dd18656a39e44a39df8b8b492ab58fd1ca0ee974
      
https://github.com/perl5-dbi/dbi/commit/dd18656a39e44a39df8b8b492ab58fd1ca0ee974
  Author: H.Merijn Brand <pe...@tux.freedom.nl>
  Date:   2024-08-11 (Sun, 11 Aug 2024)

  Changed paths:
    M DBI.xs
    M t/70callbacks.t

  Log Message:
  -----------
  Merge pull request #117 from mauke/fix-callback-leak-rt-144526

don't leak $_ after callback execution


Compare: https://github.com/perl5-dbi/dbi/compare/bcbf1cc5bc38...dd18656a39e4

To unsubscribe from these emails, change your notification settings at 
https://github.com/perl5-dbi/dbi/settings/notifications

Reply via email to