-
Notifications
You must be signed in to change notification settings - Fork 15.9k
Description
From @SVillette in googleapis/google-cloud-php#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
protobuf/php/src/Google/Protobuf/Internal/GPBUtil.php
Lines 146 to 153 in 06e65a2
public static function checkFloat(&$var) | |
{ | |
if (is_float($var) || is_numeric($var)) { | |
$var = unpack("f", pack("f", $var))[1]; | |
} else { | |
throw new \Exception("Expect float."); | |
} | |
} |
This requires further investigation.
**** copied from googleapis/google-cloud-php#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-enterprise
v1.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)