Skip to content

Commit 8a18763

Browse files
Merge pull request #334 from alichherawalla/react-native-zip-patch
fix(patch): prevent NullPointerException crash in react-native-zip-a…
2 parents e395748 + 869ddd9 commit 8a18763

1 file changed

Lines changed: 68 additions & 2 deletions

File tree

Lines changed: 68 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,57 @@
11
diff --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

Comments
 (0)