Intake: req-128.md
Validação: VALIDATION-CHECKLIST.md#batch-130
Status: implemented-pending-homologation
Este lote de implementação descreve as tarefas técnicas para mitigar os erros de execução reportados nos logs de produção do núcleo conn2flow, blindando o driver de banco de dados contra TypeError no PHP 8.1+, tornando defensiva a busca por hosts no perfil de usuário e sanando warnings de índices não definidos.
Atividades e Checklist
1. [x] Blindagem em banco.php
-
Em
banco_num_rows($result):-
Verificar se
$resulté falso, nulo ou se não é uma instância demysqli_result(ouBancoResultadoRemoto). Retornar0nesses casos.
-
-
Em
banco_select():-
Substituir
if(banco_num_rows($res))porif($res && banco_num_rows($res)).
-
2. [x] Proteção de Consulta em perfil-usuario.php
-
Na função
perfil_usuario_redefine_password():-
Proteger a consulta de
usuarios_gestores_hostscom verificação de tabela existente ou guard multi-host, tratando$id_hosts = nullcaso a tabela não exista.
-
3. [x] Eliminação de Warnings em admin-paginas.php e gestor.php
-
Em
admin-paginas.php:-
Linhas 111 e 114: substituir
if($_REQUEST[$post_nome])porif(!empty($_REQUEST[$post_nome])).
-
-
Em
gestor.php:-
Linha 2871: garantir
$layout_css_compiled = $layouts['css_compiled'] ?? '';.
-
Critérios de Aceite e Validação
-
Sintaxe:
php -lverde em todos os arquivos alterados. -
Suíte PHPUnit: Testes unitários do núcleo executando sem regressões.
-
Resiliência:
banco_num_rows(false)ebanco_selectcom query inválida não disparam fatal error.
Implementação concluída
-
banco_num_rows()preservaBancoResultadoRemoto, aceita somentemysqli_resultno caminho MySQLi e devolve0parafalse,nullou qualquer outro tipo.banco_select()verifica o retorno debanco_query()antes de inspecionar linhas. -
perfil_usuario_redefine_password()inicializa$id_hosts = nulle só consultausuarios_gestores_hostsquandogestor_schema_tabela_existe()confirma a tabela. O gate já é memoizado por requisição e falha fechado em schema indisponível. -
Os campos opcionais
raizesem_permissaousam!empty()tanto na inclusão quanto na clonagem de páginas; o CSS compilado ausente no layout passa a assumir string vazia com?? ''. -
tests/Unit/PHP/Req128HardeningTest.phpcobre os cinco contratos de regressão do lote.
Evidência de validação
-
php -l: OK nos quatro arquivos de produção e no teste novo. -
Teste focado: 5/5, 8 asserções, sem warnings ou depreciações.
-
Suíte completa: 685/685, 3.094 asserções e 4 skips de ambiente. Permanece uma depreciação preexistente do PHPUnit em
TwoFactorTest::testHotpBateComVetoresRfc4226(); o teste focado prova que ela não foi introduzida pelo lote. -
git diff --check: OK.
Pendência
-
Homologar a redefinição de senha em uma instalação dedicada real sem
usuarios_gestores_hosts, confirmando atualização da senha, histórico sem host e envio do e-mail.