diff --git a/patches/react-native-zip-archive+7.1.0.patch b/patches/react-native-zip-archive+7.1.0.patch index 80baa640b..cd030c62e 100644 --- a/patches/react-native-zip-archive+7.1.0.patch +++ b/patches/react-native-zip-archive+7.1.0.patch @@ -1,8 +1,57 @@ 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 -index 14bd68f..cccbd99 100644 +index 14bd68f..bfae10e 100644 --- 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 -@@ -470,7 +470,7 @@ public class RNZipArchiveModule extends ReactContextBaseJavaModule { +@@ -44,6 +44,7 @@ import java.nio.charset.Charset; + + public class RNZipArchiveModule extends ReactContextBaseJavaModule { + private static final String TAG = RNZipArchiveModule.class.getSimpleName(); ++ private static final String ERROR_CODE = "RNZipArchiveError"; + + private static final String PROGRESS_EVENT_NAME = "zipArchiveProgressEvent"; + private static final String EVENT_KEY_FILENAME = "filePath"; +@@ -174,7 +175,12 @@ public class RNZipArchiveModule extends ReactContextBaseJavaModule { + } + } catch (Exception ex) { + updateProgress(0, 1, zipFilePath); // force 0% +- promise.reject("RNZipArchiveError", "Failed to extract file " + ex.getLocalizedMessage()); ++ safeReject( ++ promise, ++ "RNZipArchiveError", ++ "Failed to extract file " + (ex.getLocalizedMessage() != null ? ex.getLocalizedMessage() : "unknown error"), ++ ex ++ ); + } + } + }).start(); +@@ -342,7 +348,7 @@ public class RNZipArchiveModule extends ReactContextBaseJavaModule { + processZip(filesOrDirectory, destFile, parameters, promise, password.toCharArray()); + + } catch (Exception ex) { +- promise.reject("RNZipArchiveError", ex.getMessage()); ++ safeReject(promise, ERROR_CODE, ex.getMessage() != null ? ex.getMessage() : "unknown error", ex); + return; + } + } +@@ -356,7 +362,7 @@ public class RNZipArchiveModule extends ReactContextBaseJavaModule { + processZip(filesOrDirectory, destFile, parameters, promise, null); + + } catch (Exception ex) { +- promise.reject("RNZipArchiveError", ex.getMessage()); ++ safeReject(promise, ERROR_CODE, ex.getMessage() != null ? ex.getMessage() : "unknown error", ex); + return; + } + } +@@ -413,7 +419,7 @@ public class RNZipArchiveModule extends ReactContextBaseJavaModule { + } + promise.resolve(destFile); + } catch (Exception ex) { +- promise.reject("RNZipArchiveError", ex.getMessage()); ++ safeReject(promise, ERROR_CODE, ex.getMessage() != null ? ex.getMessage() : "unknown error", ex); + return; + } + } +@@ -470,7 +476,7 @@ public class RNZipArchiveModule extends ReactContextBaseJavaModule { } private static CompressionLevel getCompressionLevel(double compressionLevel) { @@ -11,3 +60,20 @@ index 14bd68f..cccbd99 100644 case -1: return CompressionLevel.NORMAL; case 0: +@@ -499,6 +505,16 @@ public class RNZipArchiveModule extends ReactContextBaseJavaModule { + } + } + ++ private void safeReject(Promise promise, String code, String message, Throwable throwable) { ++ String safeCode = code != null ? code : "RNZipArchiveError"; ++ String safeMessage = message != null ? message : "Zip operation failed"; ++ try { ++ promise.reject(safeCode, safeMessage, throwable); ++ } catch (NullPointerException npe) { ++ Log.w(TAG, "Failed to reject promise", npe); ++ } ++ } ++ + /** + * Returns the exception stack trace as a string + */