yiisoft / yii2-redis

Yii 2 Redis extension.
http://www.yiiframework.com
BSD 3-Clause "New" or "Revised" License
452 stars 183 forks source link

Bugfix: `Cache::getValue()` should return `false` in case of missing key #247

Closed rhertogh closed 2 years ago

rhertogh commented 2 years ago
Q A
Is bugfix? ✔️
New feature?
Breaks BC? ✔️/❌ (It now adheres to the documentation, but the return value is changed)
Fixed issues yiisoft/yii2/pull/19396

According to \yii\caching\Cache::getValue() the return value should be "false if the value is not in the cache or expired".

Currently null is returned by the getValue() method. When no serializer is specified that null is casted to a string and the native unserialize() function is used in \yii\caching\Cache::get(). The unserialize() function returns false on failure, this actually causes the get method to return the correct value. However, when a serializer is specified (e.g. igbinary_unserialize) the null value from getValue() is not casted into a string. On PHP 8.1 this causes an error since a string is expected (https://www.php.net/manual/en/function.igbinary-unserialize.php). When the getValue() method would have returned the expected false, the get() method would have returned it as is without trying to unserialize it, avoiding the error (yiisoft/yii2/blob/master/framework/caching/Cache.php#L135).

This PR fixes the Cache::getValue() method by returning false when the requested key is not found.

samdark commented 2 years ago

Thanks.