fix(ecs): getZipper([]) and getIndexedZipper([]) loop up to SIZE_MAX

Aberta Para iniciantes
#490 0 comentários 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
74/100
Tipo de issue
Bug
Clareza
Claramente especificada
Status de atividade
Ativa
Stack de tecnologia
cpp, typescript, wasm
Domínio
backend, testing

Direção de pesquisa

Leia as duas funções em modules/ecs/wasm/Registry.hpp:300-322 e 338-360, com foco em como uma lista de componentes vazia define max e em como o loop cria objetos JavaScript. Confira os testes de ECS em modules/ecs/test, que, segundo o issue, atualmente não têm testes de zipper. A tarefa estará concluída quando ambas as chamadas de zipper com listas de componentes vazias retornarem arrays vazios, o erro de digitação std::size_t for corrigido e os testes cobrirem esse comportamento.

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

Descrição

bug modules:ecs
Which package is this bug report for?

ecs

Issue description

With no component in the list, max stays SIZE_MAX, every index passes, and a JS object is pushed for each one: one call hangs the tab or the server and fills memory. std:size_t (lines 309 and 347) is a typo that compiles as a label. The two functions are near copies.

Where:

Evidence:

std::size_t max = SIZE_MAX;
...
std:size_t zipper_idx = 0;
for (std::size_t idx = 0; idx < max; idx++) {
    emscripten::val obj = emscripten::val::object();

Suggested fix: Return an empty array when comps is empty, fix the std::size_t typo, and merge the two zippers behind an indexed flag. Add zipper tests (modules/ecs/test has none).

Found during a code audit of main at be72076.

Code sample

No response

Versions
  • Engine main at be72076
  • pnpm 12.0.0, Node.js 26, Bun 1.3.14
Issue priority

Medium (should be fixed soon)

I have tested this issue on a development release

be72076

Linguagem predominante
TypeScript
Estrelas
7
Forks
2
Merge médio
1d 17h
PRs com merge (30d)
17

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 NanoForge-dev/Engine

Todas as issues de NanoForge-dev/Engine

Issues semelhantes

Mais issues de TypeScript

Receba novas issues na sua caixa de entrada

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