php / php/php-src

The **const** modifier needs to be added to read-only parameters of all ZendAPI and PHPAPI functions

Ouverte
#19,523 3 commentaires 1 réaction 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

Feature Status: Needs Triage
Langage dominant
C
Étoiles
40.4k
Forks
8.2k
Merge moyen
2 j 13 h
PR mergées (30 j)
96

Description

Description

Many functions in the php source code receive the zval parameter. The value of the parameter is not modified in the function implementation. These parameters are read-only, but the const modifier is not added.

As a result, C/C++underlying developers do not know whether the function is a read-only operation or a write operation, and will pollute all downstream functions. If these PHPAPI or ZEND_API functions are used in a C++function, even if the function is designed to be read-only, the const modifier cannot be used, or only unsafe const_cast can be used to cast.

An example:

class Variant {
  protected:
    zval val;
    void destroy() {
        zval_ptr_dtor(&val);
    }

  public:
    Variant(const zval *v) noexcept {
        ZVAL_COPY_VALUE(&val, v);
    }
    const zval *const_ptr() const {
        return &val;
    }
    // fast_equal_check_function should be `fast_equal_check_function(const zval *op1, const zval *op2)`
     bool equals(const Variant &v) const {
        return fast_equal_check_function(const_ptr(), v.const_ptr());         
    }
}

Problem function:

  • fast_equal_check_function
  • php_debug_zval_dump
  • php_var_dump
  • php_var_unserialize
  • concat_function
  • add_function
  • is_equal_function
  • zval_get_string
  • zval_get_double // version 8.1

... a lot more functions

Guide de contribution

Ouvrir le guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Piste de recherche

Commencez par localiser les déclarations et les implémentations PHPAPI et ZEND_API de fast_equal_check_function, php_debug_zval_dump, php_var_dump, php_var_unserialize, concat_function, add_function, is_equal_function, zval_get_string et zval_get_double. Déterminez quels paramètres zval ne sont pas modifiés, puis mettez à jour de manière cohérente les signatures concernées dans toutes les fonctions affectées et vérifiez que le code source de PHP se compile toujours.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
c
Domaine
compilers
Type d'issue
Refactorisation
Difficulté
4/5
Temps estimé
3-5 jours
Activité
À l'abandon
Clarté
À clarifier
Accessibilité débutants
35/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.