Potential NULL pointer dereference in php_dom_create_fake_namespace_decl_node_ptr()

Ouverte Adaptée aux débutants
#25,397 1 commentaire 0 réactions 0 personnes assignées Voir sur GitHub

Les mainteneurs répondent en général sous 1 jour

Personne n'a encore pris cette issue.

Évaluation

Difficulté
2/5
Temps estimé
1-3 heures
Accessibilité débutants
68/100
Type d'issue
Bug
Clarté
Clairement spécifiée
Activité
Active
Stack technique
c
Domaine
backend

Piste de recherche

Commencez dans ext/dom/php_dom.c et examinez php_dom_create_fake_namespace_decl_node_ptr(), puis suivez la manière dont dom_object_namespace_node_clone_obj() et php_dom_create_fake_namespace_decl() traitent son résultat. Vérifiez le chemin d’échec de l’allocation de xmlNewNs() et exécutez les tests DOM pertinents. Le travail est terminé lorsque l’échec est géré sans déréférencer un pointeur NULL et que les appelants gèrent sans risque l’échec de la création.

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

Description

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

Langage dominant
C
Étoiles
41.8k
Forks
8.5k
Merge moyen
2 j 13 h
PR mergées (30 j)
145

Préparer son environnement

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.

Autres issues de php/php-src

Toutes les issues de php/php-src

Issues similaires

Plus d'issues C

Recevez les nouvelles issues par e-mail

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