11diff --git a/node_modules/react-native-zip-archive/android/src/main/java/com/rnziparchive/RNZipArchiveModule.java b/node_modules/react-native-zip-archive/android/src/main/java/com/rnziparchive/RNZipArchiveModule.java
2- index 14bd68f..cccbd99 100644
2+ index 14bd68f..bfae10e 100644
33--- a/node_modules/react-native-zip-archive/android/src/main/java/com/rnziparchive/RNZipArchiveModule.java
44+++ b/node_modules/react-native-zip-archive/android/src/main/java/com/rnziparchive/RNZipArchiveModule.java
5- @@ -470,7 +470,7 @@ public class RNZipArchiveModule extends ReactContextBaseJavaModule {
5+ @@ -44,6 +44,7 @@ import java.nio.charset.Charset;
6+
7+ public class RNZipArchiveModule extends ReactContextBaseJavaModule {
8+ private static final String TAG = RNZipArchiveModule.class.getSimpleName();
9+ + private static final String ERROR_CODE = "RNZipArchiveError";
10+
11+ private static final String PROGRESS_EVENT_NAME = "zipArchiveProgressEvent";
12+ private static final String EVENT_KEY_FILENAME = "filePath";
13+ @@ -174,7 +175,12 @@ public class RNZipArchiveModule extends ReactContextBaseJavaModule {
14+ }
15+ } catch (Exception ex) {
16+ updateProgress(0, 1, zipFilePath); // force 0%
17+ - promise.reject("RNZipArchiveError", "Failed to extract file " + ex.getLocalizedMessage());
18+ + safeReject(
19+ + promise,
20+ + "RNZipArchiveError",
21+ + "Failed to extract file " + (ex.getLocalizedMessage() != null ? ex.getLocalizedMessage() : "unknown error"),
22+ + ex
23+ + );
24+ }
25+ }
26+ }).start();
27+ @@ -342,7 +348,7 @@ public class RNZipArchiveModule extends ReactContextBaseJavaModule {
28+ processZip(filesOrDirectory, destFile, parameters, promise, password.toCharArray());
29+
30+ } catch (Exception ex) {
31+ - promise.reject("RNZipArchiveError", ex.getMessage());
32+ + safeReject(promise, ERROR_CODE, ex.getMessage() != null ? ex.getMessage() : "unknown error", ex);
33+ return;
34+ }
35+ }
36+ @@ -356,7 +362,7 @@ public class RNZipArchiveModule extends ReactContextBaseJavaModule {
37+ processZip(filesOrDirectory, destFile, parameters, promise, null);
38+
39+ } catch (Exception ex) {
40+ - promise.reject("RNZipArchiveError", ex.getMessage());
41+ + safeReject(promise, ERROR_CODE, ex.getMessage() != null ? ex.getMessage() : "unknown error", ex);
42+ return;
43+ }
44+ }
45+ @@ -413,7 +419,7 @@ public class RNZipArchiveModule extends ReactContextBaseJavaModule {
46+ }
47+ promise.resolve(destFile);
48+ } catch (Exception ex) {
49+ - promise.reject("RNZipArchiveError", ex.getMessage());
50+ + safeReject(promise, ERROR_CODE, ex.getMessage() != null ? ex.getMessage() : "unknown error", ex);
51+ return;
52+ }
53+ }
54+ @@ -470,7 +476,7 @@ public class RNZipArchiveModule extends ReactContextBaseJavaModule {
655 }
756
857 private static CompressionLevel getCompressionLevel(double compressionLevel) {
@@ -11,3 +60,20 @@ index 14bd68f..cccbd99 100644
1160 case -1:
1261 return CompressionLevel.NORMAL;
1362 case 0:
63+ @@ -499,6 +505,16 @@ public class RNZipArchiveModule extends ReactContextBaseJavaModule {
64+ }
65+ }
66+
67+ + private void safeReject(Promise promise, String code, String message, Throwable throwable) {
68+ + String safeCode = code != null ? code : "RNZipArchiveError";
69+ + String safeMessage = message != null ? message : "Zip operation failed";
70+ + try {
71+ + promise.reject(safeCode, safeMessage, throwable);
72+ + } catch (NullPointerException npe) {
73+ + Log.w(TAG, "Failed to reject promise", npe);
74+ + }
75+ + }
76+ +
77+ /**
78+ * Returns the exception stack trace as a string
79+ */
0 commit comments