RFC: ZPP Failure on Overflow

Aujourd’hui, lorsqu’un nombre flottant trop grand pour tenir dans les valeurs supportées pour les entiers est passé en paramètre d’une fonction interne (fonction exposée par PHP ou une extension PHP) qui attend un entier, il est reçu par la fonction sous la forme… d’un entier… ce qui entraîne une perte d’information.

Note technique : une fonction interne spécifie de quel type (au sens C du terme, donc avec du typage strict) chaque paramètre reçu doit être. Il n’y a pas, en C, de type fourre-tout comme c’est le cas pour les variables de PHP, avec utilisation automatique de flottants lorsque des nombres sont trop grands pour tenir sur des entiers.

Cette RFC proposait donc que, dans le cas où un paramètre entier est attendu et que la valeur reçue est un flottant trop grand pour tenir dans un entier, l’analyse des paramètres de la fonction interne appelée échoue, que la fonction retourne sans s’exécuter, et qu’un avertissement soit levé.

Impact pour les utilisateurs de PHP : appeler une fonction interne attendant un entier en passant une valeur trop grande pour tenir dans un entier entraînera la levée d’un avertissement et la non-exécution de la fonction — au lieu de son exécution avec une valeur tronquée.

Cette RFC visait la version 7 de PHP.

Les votes ont été ouverts le 2 Décembre 2014 et on été clos le 12 décembre 2014. Cette RFC touchant plus à de l’implémentation qu’à des fonctionnalités, nous avons timidement exprimé notre opinion sur internals@, en considérant qu’il valait mieux un avertissement clair qu’un comportement étrange.
La RFC a été adoptée à l’unanimité (16 pour, 0 contre).

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *