Potential NULL pointer dereference in php_dom_create_fake_namespace_decl_node_ptr()

Aperta Adatta ai principianti
#25,397 1 commento 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 1 giorno

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
2/5
Tempo stimato
1-3 ore
Idoneità per principianti
68/100
Tipo di issue
Bug
Chiarezza
Specificata chiaramente
Stato di attività
Attiva
Stack tecnologico
c
Ambito
backend

Direzione di ricerca

Inizia in ext/dom/php_dom.c ed esamina php_dom_create_fake_namespace_decl_node_ptr(), poi segui come dom_object_namespace_node_clone_obj() e php_dom_create_fake_namespace_decl() gestiscono il suo risultato. Controlla il percorso di errore in caso di fallimento dell’allocazione di xmlNewNs() ed esegui i test DOM pertinenti. Il lavoro è completato quando l’errore viene gestito senza dereferenziare un puntatore NULL e i chiamanti gestiscono in sicurezza il fallimento della creazione.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

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

Lingua principale
C
Stelle
41.8k
Fork
8.5k
Merge medio
2g 13h
PR unite (30g)
145

Preparare l'ambiente

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di php/php-src

Tutte le issue di php/php-src

Issue simili

Altre issue su C

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.