Potential NULL pointer dereference in php_dom_create_fake_namespace_decl_node_ptr()

Aberta Para iniciantes
#25,397 1 comentário 0 reações 0 responsáveis Ver no GitHub

Mantenedores costumam responder em até 1 dia

Ninguém assumiu esta issue ainda.

Avaliação

Dificuldade
2/5
Tempo estimado
1-3 horas
Facilidade para iniciantes
68/100
Tipo de issue
Bug
Clareza
Claramente especificada
Status de atividade
Ativa
Stack de tecnologia
c
Domínio
backend

Direção de pesquisa

Comece em ext/dom/php_dom.c e inspecione php_dom_create_fake_namespace_decl_node_ptr(); em seguida, acompanhe como dom_object_namespace_node_clone_obj() e php_dom_create_fake_namespace_decl() tratam o resultado. Verifique o caminho de falha na alocação de xmlNewNs() e execute os testes de DOM pertinentes. O trabalho estará concluído quando a falha for tratada sem desreferenciar um ponteiro NULL e os chamadores lidarem com segurança com a falha de criação.

Escrita pelo modelo de indexação a partir do texto da issue.

Descrição

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

Linguagem predominante
C
Estrelas
41.8k
Forks
8.5k
Merge médio
2d 13h
PRs com merge (30d)
145

Preparar o ambiente

Primeiros passos

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Mais de php/php-src

Todas as issues de php/php-src

Issues semelhantes

Mais issues de C

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.