libjsi.so links folly and double-conversion statically, so Fantom's tester holds two copies of each (ASan: odr-violation)
Los mantenedores suelen responder en 2 días
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 35/100
- Tipo de issue
- Error
- Claridad
- Bastante claro
- Estado de actividad
- Activo
- Stack tecnológico
- cmake, cpp, react-native
- Área
- build-system
Línea de trabajo
Start in ReactCommon/jsi/CMakeLists.txt, where jsi is built shared and linked against static folly_runtime and double-conversion; compare that with how private/react-native-fantom/tester/third-party/folly/CMakeLists.txt links its own copies. Reproduce with the provided reproduce.sh asan-jsi-duplicates-folly or the listed gradle/yarn commands, then decide whether the tester should link a static jsi or avoid duplicate static dependencies. Done means the ASan build runs View-itest.js without the odr-violation while preserving the tester's intended sanitizer coverage.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Description
ReactCommon/jsi/CMakeLists.txt builds jsi as a shared library and links folly_runtime into it, and with folly double-conversion, both static. Fantom's tester links folly_runtime and double-conversion statically itself, and libjsi.so beside them, so its process holds two copies of each, their globals included.
Built under AddressSanitizer, with Hermes left uninstrumented, the tester stops before its first test on an odr-violation for double-conversion's PowersOfTenCache::kDecimalExponentDistance, defined once in fantom_tester and once in libjsi.so. With jsi built static in the tester there is one copy, and the tester runs its tests under AddressSanitizer.
Steps to reproduce
git clone https://github.com/YevheniiKotyrlo/react-native-fantom-reproducer && cd react-native-fantom-reproducer./fantom/reproduce.sh asan-jsi-duplicates-folly(needs Docker). It clonesreact/react-nativeatmain, addsfolly/memory/SanitizeLeak.cppto the tester's folly (#59668), builds Hermes without the sanitizer, then the tester under AddressSanitizer, and runspackages/react-native/Libraries/Components/View/__tests__/View-itest.js.
The same on a checkout of main, with folly/memory/SanitizeLeak.cpp added to folly_runtime_SRC in private/react-native-fantom/tester/third-party/folly/CMakeLists.txt:
./gradlew :private:react-native-fantom:prepareHermesDependencies
export CFLAGS="-fsanitize=address -fno-omit-frame-pointer"
export CXXFLAGS="-fsanitize=address -fno-omit-frame-pointer -Wno-error=deprecated-literal-operator"
export LDFLAGS="-fuse-ld=lld -fsanitize=address"
yarn workspace @react-native/fantom build
yarn fantom packages/react-native/Libraries/Components/View/__tests__/View-itest.js
Hermes is built first so the sanitizer flags reach only the tester; with Hermes instrumented too, the first report is #59669 instead.
Expected: one copy of folly_runtime and double-conversion in the tester's process, so View-itest.js runs its tests under AddressSanitizer, as it does with jsi built static in the tester.
Seen: the tester stops before its first test on an AddressSanitizer odr-violation for double_conversion::PowersOfTenCache::kDecimalExponentDistance, defined in both fantom_tester and libjsi.so (the log under Stacktrace or Logs).
React Native Version
0.88.0 (reproduced on main at 54905a2)
Affected Platforms
Build - Linux
Output of npx @react-native-community/cli info
System:
OS: Linux 6.18 Ubuntu 22.04.5 LTS 22.04.5 LTS (Jammy Jellyfish)
CPU: (24) x64 AMD Ryzen 9 9950X3D 16-Core Processor
Memory: 116.43 GB / 125.63 GB
Shell:
version: 5.1.16
path: /bin/bash
Binaries:
Node:
version: 22.14.0
path: /usr/local/bin/node
Yarn:
version: 1.22.22
path: /usr/local/bin/yarn
npm:
version: 10.9.2
path: /usr/local/bin/npm
Watchman: Not Found
SDKs:
Android SDK:
API Levels:
- "37"
Build Tools:
- 37.0.0
Android NDK: 28.2.13676358
IDEs:
Android Studio: Not Found
Languages:
Java:
version: 17.0.20.1
path: /usr/bin/javac
Ruby:
version: 3.0.2
path: /usr/bin/ruby
npmPackages:
"@react-native-community/cli": Not Found
react: Not Found
react-native: Not Found
npmGlobalPackages:
"*react-native*": Not Found
Android:
hermesEnabled: Not found
newArchEnabled: Not found
iOS:
hermesEnabled: Not found
newArchEnabled: Not found
Stacktrace or Logs
==8078==ERROR: AddressSanitizer: odr-violation (0x59f24c526260):
[1] size=4 'double_conversion::PowersOfTenCache::kDecimalExponentDistance' /react-native/packages/react-native/ReactAndroid/build/third-party-ndk/double-conversion/double-conversion/cached-powers.h:40 in /react-native/private/react-native-fantom/build/tester/fantom_tester
[2] size=4 'double_conversion::PowersOfTenCache::kDecimalExponentDistance' /react-native/packages/react-native/ReactAndroid/build/third-party-ndk/double-conversion/double-conversion/cached-powers.h:40 in /react-native/private/react-native-fantom/build/tester/ReactCommon/jsi/libjsi.so
These globals were registered at these points:
[1]:
#0 0x59f24c93e489 in __asan_register_globals /home/runner/work/llvm-project/llvm-project/compiler-rt/lib/asan/asan_globals.cpp:431:3
#1 0x59f24c93f5b9 in __asan_register_elf_globals /home/runner/work/llvm-project/llvm-project/compiler-rt/lib/asan/asan_globals.cpp:414:3
#2 0x73f2a0b5deba in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x29eba) (BuildId: 6a6cb5a80fd5e5bb5bf3aeaa111add98e88843a5)
[2]:
#0 0x59f24c93e489 in __asan_register_globals /home/runner/work/llvm-project/llvm-project/compiler-rt/lib/asan/asan_globals.cpp:431:3
#1 0x59f24c93f5b9 in __asan_register_elf_globals /home/runner/work/llvm-project/llvm-project/compiler-rt/lib/asan/asan_globals.cpp:414:3
#2 0x73f2a1b2a47d (/lib64/ld-linux-x86-64.so.2+0x647d) (BuildId: e6d3f5d4f2a24a5464ab59ae321b9474d70410f8)
==8078==HINT: if you don't care about these errors you may set ASAN_OPTIONS=detect_odr_violation=0
SUMMARY: AddressSanitizer: odr-violation: global 'double_conversion::PowersOfTenCache::kDecimalExponentDistance' at /react-native/packages/react-native/ReactAndroid/build/third-party-ndk/double-conversion/double-conversion/cached-powers.h:40 in /react-native/private/react-native-fantom/build/tester/fantom_tester
MANDATORY Reproducer
https://github.com/YevheniiKotyrlo/react-native-fantom-reproducer
Screenshots and Videos
No response
- Lenguaje dominante
- C++
- Estrellas
- 127k
- Forks
- 25.4k
- Merge medio
- 3 d 8 h
- PR fusionados (30 d)
- 118
Preparar el entorno
- Sin Dockerfile ni archivo de Docker Compose
- Tiene una 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 react/react-native
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
react/react-native#59722 ·
Los mantenedores suelen responder en 2 días
-
Android: new WebSocket() crashes the app for a URL that OkHttp or java.net.URI rejectsPosiblemente ocupada @sorinc03 la tomó hace 2 días. Abierto🌐Networking Needs: Author Feedback Needs: Repro Platform: Android
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
react/react-native#59704 · 1 comentario ·
Los mantenedores suelen responder en 2 días
-
On the nightly, @react-native-community/cli 20 finds no platforms or commands, with no warning that it needs CLI 21Posiblemente ocupada @LuisPeixoto la tomó hoy. Abierto
Dificultad 1/5 Menos de una hora Aptitud para principiantes 88/100
react/react-native#59694 ·
Los mantenedores suelen responder en 2 días
-
Image.resolveAssetSource's TypeScript declaration drops the null it returns for an unknown assetPosiblemente ocupada @Hassan1305 la tomó hace 4 días. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
react/react-native#59648 · 1 comentario ·
Los mantenedores suelen responder en 2 días
-
Linking.getInitialURL() returns the task's first link after a link relaunches a reclaimed Android appPosiblemente ocupada @YevheniiKotyrlo la tomó hace 21 días. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
react/react-native#59006 · 2 comentarios ·
Los mantenedores suelen responder en 2 días
Todos los issues de react/react-native
Issues similares
-
bug libcudf
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
Los mantenedores suelen responder en 2 días
-
level/task module/cloud monitoring type/maintenance
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
LadybirdBrowser/ladybird#13809 ·
Los mantenedores suelen responder en 1 día
-
bug module:nodes tests
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
rocketride-org/rocketride-server#3020 ·
Los mantenedores suelen responder en 2 días
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
Los mantenedores suelen responder en 9 días