You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I've recently updated a project from PHP 7.0 to PHP 7.2 that uses antecent/patchwork to allow me to mock particular functions. Under PHP 7.0, this was working well, but under PHP 7.2 I get the following warnings.
PHP Warning: call_user_func() expects parameter 1 to be a valid callback, cannot access protected method PhpAmqpLib\Channel\AMQPChannel::channel_close_ok() in /var/www/api/vendor/antecedent/patchwork/src/CallRerouting.php(447) : eval()'d code on line 20
PHP Warning: call_user_func() expects parameter 1 to be a valid callback, cannot access protected method PhpAmqpLib\Connection\AMQPConnection::connection_close_ok() in /var/www/api/vendor/antecedent/patchwork/src/CallRerouting.php(447) : eval()'d code on line 20
When updating from 7.0 to 7.2, the php-amqplib/php-amqplib dependency was updated from v2.8.1 to v2.9.2. As far as I can tell the channel_close_ok and connection_close_ok functions mentioned have always been protected functions, and both functions are defined on classes that extend abstract classes.
The project is using patchwork 2.1.8.
The initial issue is that I can't tell how the eval is getting invoked for these functions in the first place. The eval location at line 447 at CallRerouting.php is a part of createStubsForInternals. The $name used in the eval should be coming from Config\getRedefinableInternals() which is the list of default internals (from Config.php) and any items in the patchwork.json, in the redefinable-internals section, for which I have syslog and sleep.
Unless the issue is that it's call_user_func that has been redefined by the in the rerouting, and the phpamqplib code base is using call_user_func to run the protected functions, and it can't because the it isn't being run from the same namespace as the protected functions.
Have I hit a limitation in patchwork with regards to how call_user_func may get used to call protected functions in third party libraries?
The text was updated successfully, but these errors were encountered:
I've recently updated a project from PHP 7.0 to PHP 7.2 that uses antecent/patchwork to allow me to mock particular functions. Under PHP 7.0, this was working well, but under PHP 7.2 I get the following warnings.
When updating from 7.0 to 7.2, the php-amqplib/php-amqplib dependency was updated from v2.8.1 to v2.9.2. As far as I can tell the
channel_close_ok
andconnection_close_ok
functions mentioned have always beenprotected
functions, and both functions are defined on classes that extend abstract classes.The project is using patchwork 2.1.8.
The initial issue is that I can't tell how the eval is getting invoked for these functions in the first place. The eval location at line 447 at CallRerouting.php is a part of
createStubsForInternals
. The$name
used in the eval should be coming fromConfig\getRedefinableInternals()
which is the list of default internals (fromConfig.php
) and any items in the patchwork.json, in the redefinable-internals section, for which I havesyslog
andsleep
.Unless the issue is that it's
call_user_func
that has been redefined by the in the rerouting, and the phpamqplib code base is using call_user_func to run the protected functions, and it can't because the it isn't being run from the same namespace as the protected functions.Have I hit a limitation in patchwork with regards to how call_user_func may get used to call protected functions in third party libraries?
The text was updated successfully, but these errors were encountered: