Bug Report(Android): prevent NullPointerException crash when Promise.reject receives null code
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 1/5
- Tempo stimato
- Meno di un'ora
- Idoneità per principianti
- 85/100
Direzione di ricerca
Inizia in android/src/main/java/com/rnfs/RNFSManager.java intorno alla riga 978, dove lo stack trace identifica il percorso del rifiuto, e rivedi il contratto di React Native Promise.reject nell’ambiente indicato. Esegui una chiamata al file system Android che fallisca e conferma che l’eccezione raggiunga JavaScript come rifiuto gestito senza una NullPointerException nativa.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Hi!
Firstly, thanks for your work on this project!
Issue Description
Description
When calling certain file system methods on Android (e.g., RNFSManager), the app crashes on the native side if an exception is thrown.
The underlying cause is that RNFSManager passes null as the first argument to promise.reject(null, ex.getMessage()). Newer versions of React Native implement PromiseImpl in Kotlin, where the code parameter is strictly defined as non-null (@NotNull). Passing null causes Kotlin's runtime assertion to throw an unhandled NullPointerException on the Android main thread, crashing the application before the error can be handled in JavaScript.
Environment
- React native 0.83.1
- react-native-fs 2.20
Stacktrace
Fatal Exception: java.lang.NullPointerException
Parameter specified as non-null is null: method com.facebook.react.bridge.PromiseImpl.reject, parameter code
at com.facebook.react.bridge.PromiseImpl.reject(PromiseImpl.kt:2)
at com.rnfs.RNFSManager.reject(RNFSManager.java:978)
at com.rnfs.RNFSManager.access$000(RNFSManager.java:60)
Here is the diff that solved my problem:
--- a/node_modules/react-native-fs/android/src/main/java/com/rnfs/RNFSManager.java
+++ b/node_modules/react-native-fs/android/src/main/java/com/rnfs/RNFSManager.java
@@ -975,7 +975,7 @@ public class RNFSManager extends ReactContextBaseJavaModule {
return;
}
- promise.reject(null, ex.getMessage());
+ promise.reject("EUNSPECIFIED", ex.getMessage());
}
private void rejectFileNotFound(Promise promise, String filepath) {
- Lingua principale
- C++
- Stelle
- 5k
- Fork
- 1k
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Preparare l'ambiente
Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di itinance/react-native-fs
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
itinance/react-native-fs#1167 ·
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 65/100
itinance/react-native-fs#1010 ·
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 72/100
itinance/react-native-fs#1003 · 2 reazioni ·
-
WebsiteAperta
Difficoltà 5/5 Più di una settimana Idoneità per principianti 10/100
itinance/react-native-fs#1264 ·
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 20/100
itinance/react-native-fs#1263 · 4 commenti · 4 reazioni ·
Tutte le issue di itinance/react-native-fs
Issue simili
-
Mac mini M6 (16 GB): Q2_0 streaming works - measured 11.7->27.2 tok/s + arena fix for sub-32 GB MacsAperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
I maintainer di solito rispondono entro 1 giorno
-
champion good first issue remake source/qq
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
metasequoiaime/msime-windows#1025 ·
I maintainer di solito rispondono entro 1 giorno
-
backlog bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
EchoTools/nevr-runtime#653 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
InfiniTimeOrg/InfiniTime#2492 ·