Recapcha: Wrong score conversion
SVillette opened this issue · 1 comments
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)
Hello! Thank you for reporting this! This seems to be an issue in the protobuf layer itself (GPBUtil
is part of the protobuf package, not this library).
I have opened up an issue to track it here: protocolbuffers/protobuf#17467
By the looks of the code, it does seem quite intentional (the variable is passed by reference and then set to the result of unpack("f", pack("f", $var))[1]
), but I couldn't you why this is being done.
Closing so that discussion can happen in protobuf