[PHP]: GPBUtil::checkFloat modifies the passed-in variable
From @SVIllette in https://github.com/googleapis/google-cloud-php/issues/7045. I am moving it here because it describes an issue in Google\Protobuf\Internal\GPBUtil. I was able to verify this is happening in the native PHP library and when the protobuf C extension is enabled.
To me this seems like a bug, as I don't know why a method called checkFloat should pass by reference / modify the behavior of the variable being checked. However, it looks like it was done quite intentionally
https://github.com/protocolbuffers/protobuf/blob/06e65a29de31efc65d4ab4e07b19c1636fc45d9c/php/src/Google/Protobuf/Internal/GPBUtil.php#L146-L153
This requires further investigation.
**** copied from https://github.com/googleapis/google-cloud-php/issues/7045 ****
Description
Hi guys,
I just installed this package and noticed a strange behaviour when an object of class Google\Cloud\RecaptchaEnterprise\V1\RiskAnalysis is hydrated from the json response when creating an assessment (especially the score property). I discovered this bug when I tested recaptcha behaviour with a score threshold of 0.9 and it failed because the score was 0.8999999761581421.
Environment details
- OS: MacOS
- PHP version: 8.2
- Package name and version:
googleapis/google-cloud-php-recaptcha-enterprisev1.8.1
Code example
$var = 0.9;
GPBUtil::checkFloat($var);
var_dump($var);
$var = 0.7;
GPBUtil::checkFloat($var);
var_dump($var);
$var = 0.3;
GPBUtil::checkFloat($var);
var_dump($var);
$var = 0.1;
GPBUtil::checkFloat($var);
var_dump($var);
The output is the following : (from https://3v4l.org/CgGYZ)
8.0 - 8.3
float(0.8999999761581421)
float(0.699999988079071)
float(0.30000001192092896)
float(0.10000000149011612)
5.4 - 8.0
float(0.89999997615814)
float(0.69999998807907)
float(0.30000001192093)
float(0.10000000149012)
@bshaffer - past you appears to be the author of said intentional line of code. See https://github.com/protocolbuffers/protobuf/commit/468bc193ec155756bccf2b2d9eeb8e003d95ce31. Introduced in https://github.com/protocolbuffers/protobuf/pull/8187
We triage inactive PRs and issues in order to make it easier to find active work. If this issue should remain active or becomes active again, please add a comment.
This issue is labeled inactive because the last activity was over 90 days ago. This issue will be closed and archived after 14 additional days without activity.
Please keep this issue opened
We triage inactive PRs and issues in order to make it easier to find active work. If this issue should remain active or becomes active again, please add a comment.
This issue is labeled inactive because the last activity was over 90 days ago. This issue will be closed and archived after 14 additional days without activity.
Please keep this issue opened
We triage inactive PRs and issues in order to make it easier to find active work. If this issue should remain active or becomes active again, please add a comment.
This issue is labeled inactive because the last activity was over 90 days ago. This issue will be closed and archived after 14 additional days without activity.
This issue is active