php / php/php-src

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

Abierto
#19,523 3 comentarios 1 reacción 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Feature Status: Needs Triage
Lenguaje dominante
C
Estrellas
40.4k
Forks
8.1k
Merge medio
2 d 13 h
PR fusionados (30 d)
96

Descripción

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

Guía de contribución

Abrir la guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Línea de trabajo

Comienza localizando las declaraciones e implementaciones de PHPAPI y ZEND_API para fast_equal_check_function, php_debug_zval_dump, php_var_dump, php_var_unserialize, concat_function, add_function, is_equal_function, zval_get_string y zval_get_double. Determina qué parámetros zval no se modifican, luego actualiza de forma coherente las firmas aplicables en todas las funciones afectadas y verifica que el código fuente de PHP siga compilándose.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Stack tecnológico
c
Área
compilers
Tipo de issue
Refactorización
Dificultad
4/5
Tiempo estimado
3-5 días
Estado de actividad
Estancado
Claridad
Necesita aclaración
Aptitud para principiantes
35/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.