Potential NULL pointer dereference in php_dom_create_fake_namespace_decl_node_ptr()

Offen Anfängerfreundlich
#25,397 1 Kommentar 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Maintainer antworten meist innerhalb von 1 Tag

Dieses Issue hat noch niemand übernommen.

Bewertung

Schwierigkeit
2/5
Geschätzter Aufwand
1-3 Stunden
Anfängerfreundlichkeit
68/100
Issue-Typ
Bug
Klarheit
Klar beschrieben
Aktivitätsstatus
Aktiv
Tech-Stack
c
Bereich
backend

Rechercherichtung

Beginne in ext/dom/php_dom.c und untersuche php_dom_create_fake_namespace_decl_node_ptr(); verfolge anschließend, wie dom_object_namespace_node_clone_obj() und php_dom_create_fake_namespace_decl() mit dem Ergebnis umgehen. Prüfe den Fehlerpfad bei einer fehlgeschlagenen xmlNewNs()-Allokation und führe die relevanten DOM-Tests aus. Fertig ist die Aufgabe, wenn der Fehler behandelt wird, ohne einen NULL-Zeiger zu dereferenzieren, und die Aufrufer sicher mit einem fehlgeschlagenen Erstellungsversuch umgehen.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Beschreibung

Bug Status: Needs Triage
Description

Hi, my static analyzer, Svace, has found a potential bug. Could you take a look and provide some feedback?
(File - /ext/dom/php_dom.c)

The function php_dom_create_fake_namespace_decl_node_ptr() dereferences the return value of xmlNewNs() without checking whether it is NULL.

xmlNsPtr curns = xmlNewNs(NULL, original->href, NULL);
if (original->prefix) {
    curns->prefix = xmlStrdup(original->prefix);
}
<?php

Since xmlNewNs() may return NULL on allocation failure, a non-NULL original->prefix can cause a NULL pointer dereference when accessing curns->prefix.

Impact

This may lead to a crash of the PHP process, potentially resulting in a denial of service (DoS) when processing DOM namespace nodes.

The affected function is called from dom_object_namespace_node_clone_obj() and php_dom_create_fake_namespace_decl(), making the issue relevant to namespace node cloning and creation.

Proposed Solution

Check the return value of xmlNewNs() before dereferencing curns and handle allocation failures appropriately. Additionally, ensure that callers correctly handle a failure to create the fake namespace declaration node.

PHP Version
PHP 8.3.31
Operating System

No response

Vorherrschende Sprache
C
Sterne
41.8k
Forks
8.5k
Ø Merge
2 T. 13 Std.
Gemergte PRs (30 T.)
145

Entwicklungsumgebung

Erste Schritte

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Mehr aus php/php-src

Alle Issues in php/php-src

Ähnliche Issues

Weitere Issues zu C

Neue Issues direkt in Ihr Postfach

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