]> git.evergreen-ils.org Git - OpenSRF.git/commit
LP#1652122: fix infinite recursion in opensrf.system.method.all
authorGalen Charlton <gmc@esilibrary.com>
Thu, 22 Dec 2016 10:53:12 +0000 (15:53 +0500)
committerGalen Charlton <gmc@equinoxinitiative.org>
Thu, 16 Feb 2017 19:53:14 +0000 (14:53 -0500)
commitb6fe0b1c9917d3d188ff8053f5fc3611ef878b3a
treeec50dd4b5a577dd6bb733b24b9333747bc0c9d50
parent318ec1ad8f15184be46de3ef6d564e43d0139b79
LP#1652122: fix infinite recursion in opensrf.system.method.all

Under certain circumstances, calling opensrf.system.method.all on a
Perl service can result in an infinite recursion when attempting to
serialize an OpenSRF::Application object to JSON.  In particular,
this was observed to happen when doing an introspection of
the opensrf.settings service.

This patch avoids the infinite recursion (and consequent memory
leak) by ensuring that the 'session' key is slated for exclusion
from serialization from OpenSRF::Application objects during
bootstrapping.

Note that the problem does not affect all Perl services; if a
Perl service declares at least one streaming method, the auto-registration
of the .atomic method will result in 'session'-stripping.

This patch fixes a regression introduced in bug 1350457.

To test
-------
[1] Run 'introspect opensrf.settings' via srfsh; observe
    that it never returns and that the opensrf.settings drone
    will grow in memory sized until killed.
[2] Apply the patch, then repeat step 1. This time, the
    request should succeed.

Signed-off-by: Galen Charlton <gmc@esilibrary.com>
Signed-off-by: Mike Rylander <mrylander@gmail.com>
src/perl/lib/OpenSRF/System.pm