php / php/php-src

ZEND_MOD_CONFLICTS doesn't work

Offen
#14,067 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Bug Status: Needs Triage
Vorherrschende Sprache
C
Sterne
40.4k
Forks
8.1k
Ø Merge
2 T. 13 Std.
Gemergte PRs (30 T.)
96

Beschreibung

Description

When building PHP extension that has ZEND_MOD_CONFLICTS listed in its dependencies, the macro is ineffective when building shared extensions or when conflicting module is registered after such extension.

For example. Suppose we add the following hypothetical change to ext/ctype/ctyp.c (to mark the ext/curl extension as conflicting for the ext/ctype):

diff --git a/ext/ctype/ctype.c b/ext/ctype/ctype.c
--- a/ext/ctype/ctype.c
+++ b/ext/ctype/ctype.c
@@ -33,9 +33,15 @@ static PHP_MINFO_FUNCTION(ctype);
 
 /* }}} */
 
+static const zend_module_dep ctype_deps[] = {
+       ZEND_MOD_CONFLICTS("curl")
+       ZEND_MOD_END
+};
+
 /* {{{ ctype_module_entry */
 zend_module_entry ctype_module_entry = {
-       STANDARD_MODULE_HEADER,
+       STANDARD_MODULE_HEADER_EX, NULL,
+       ctype_deps,
        "ctype",
        ext_functions,
        NULL,
(END)

Then building it with:

./buildconf
./configure --enable-ctype=shared --with-curl=shared
make
./sapi/cli/php -d extension_dir=modules -d extension=ctype -d extension=curl -m

Resulted in this output (here no warning is given):

[PHP Modules]
Core
ctype
curl
date
dom
fileinfo
filter
...
[Zend Modules]

But I expected this output instead:

Warning: Cannot load module "ctype" because conflicting module "curl" is already loaded in Unknown on line 0
[PHP Modules]
Core
curl
date
dom
fileinfo
filter
...
[Zend Modules]

Unlike, when doing:

./sapi/cli/php -d extension_dir=modules -d extension=curl -d extension=ctype -m

the warning is displayed and extension is not loaded as it should be done.

PHP Version

All

Operating System

No response

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Rechercherichtung

Beginne mit ext/ctype/ctype.c und reproduziere das Problem mithilfe der bereitgestellten Build-Befehle und CLI-Reihenfolgen zum Laden von Erweiterungen. Verfolge, wie ZEND_MOD_CONFLICTS behandelt wird, wenn ctype und curl in jeder Reihenfolge geladen werden; abgeschlossen ist die Aufgabe, wenn die in Konflikt stehende Erweiterung in beiden Fällen mit gemeinsam genutzten Erweiterungen mit der erwarteten Warnung abgelehnt wird.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
c, php
Bereich
backend
Issue-Typ
Bug
Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Aktivitätsstatus
Veraltet
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
45/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.