Android napi: console.time / console.timeEnd dereference a missing map entry
Los mantenedores suelen responder en 1 día
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 1-2 días
- Aptitud para principiantes
- 55/100
Línea de trabajo
Start with NativeScript/runtime/android/napi/modules/console/Console.cpp and compare the napi console creation and callbacks with createConsole() in the jsi tree. Reproduce with console.time("x"); console.timeEnd("x"); on a napi engine, then check that per-environment timer state is initialized, missing entries return safely, and access is synchronized. Done means the repro measures and logs elapsed time without undefined behavior.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Summary
On napi, console.time and console.timeEnd dereference a map iterator that is always end(). Console::s_envToConsoleTimersMap (NativeScript/runtime/android/napi/modules/console/Console.cpp) is never given an entry for any napi_env, so:
auto it = Console::s_envToConsoleTimersMap.find(env);
if (it == Console::s_envToConsoleTimersMap.end()) {
// throw?
}
...
it->second.insert(std::make_pair(label, timeStamp)); // it == end()
timeCallback inserts into it->second with it == end(), which is undefined behaviour. timeEndCallback copies it->second by value and later erases from it, which is undefined for the same reason.
The jsi tree does not have this bug: its createConsole() emplaces an entry per runtime, and its callbacks return early when the entry is missing.
Repro
On any napi engine:
console.time("x");
console.timeEnd("x");
The result depends on the heap layout: anything from nothing visible to a corrupted heap or a crash.
Expected
console.time / console.timeEnd measure and log the elapsed time. Fix: create the per-env entry when the console is created, as jsi does, and bail out if it is missing. The map has the same cross-thread race as the jsi one, so it needs the same synchronization.
Environment
- Branch:
android-react-nativeat 64c7fed0 - Binding layer: napi (all engines)
- Lenguaje dominante
- C++
- Estrellas
- 27
- Forks
- 4
- Merge medio
- 16 h 48 min
- PR fusionados (30 d)
- 4
Preparar el entorno
- Sin Dockerfile ni archivo de Docker Compose
- Sin plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de NativeScript/runtimes
-
bug
Dificultad 4/5 3-5 días Aptitud para principiantes 48/100
NativeScript/runtimes#100 ·
Los mantenedores suelen responder en 1 día
-
bug
Dificultad 4/5 3-5 días Aptitud para principiantes 45/100
NativeScript/runtimes#99 ·
Los mantenedores suelen responder en 1 día
-
bug
Dificultad 4/5 3-5 días Aptitud para principiantes 53/100
NativeScript/runtimes#97 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
bug
Dificultad 4/5 3-5 días Aptitud para principiantes 48/100
NativeScript/runtimes#94 ·
Los mantenedores suelen responder en 1 día
-
bug
Dificultad 4/5 3-5 días Aptitud para principiantes 48/100
NativeScript/runtimes#93 ·
Los mantenedores suelen responder en 1 día
Todos los issues de NativeScript/runtimes
Issues similares
-
bug priority: low
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 86/100
chipsalliance/verible#2644 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 74/100
grafana/pyroscope-dotnet#470 ·
Los mantenedores suelen responder en 1 día
-
documentation P5 XS
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
open-astro/AlpacaBridge#1848 ·
Los mantenedores suelen responder en 1 día
-
DiskANN AnnIterator returns unconverted IP distances after the graph walk runs out of candidatesAbierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
zilliztech/knowhere#1933 ·
Los mantenedores suelen responder en 1 día