From ad731085b05507247801b39be13ad2bdb09973be Mon Sep 17 00:00:00 2001 From: xuchenghua09 Date: Fri, 8 Jul 2022 16:07:46 +0800 Subject: [PATCH 1/6] fix zlib callback not notify bug Signed-off-by: xuchenghua09 --- interfaces/kits/zip/kits/napi/napi_zlib.cpp | 210 +++++++++++--------- 1 file changed, 112 insertions(+), 98 deletions(-) diff --git a/interfaces/kits/zip/kits/napi/napi_zlib.cpp b/interfaces/kits/zip/kits/napi/napi_zlib.cpp index 1d00c0bab8..c70487e506 100755 --- a/interfaces/kits/zip/kits/napi/napi_zlib.cpp +++ b/interfaces/kits/zip/kits/napi/napi_zlib.cpp @@ -61,20 +61,19 @@ constexpr int32_t PARAM3 = 3; return ret; \ } -std::shared_ptr g_zipAceCallbackInfo = nullptr; -std::shared_ptr g_unzipAceCallbackInfo = nullptr; -void ZipFileAsyncCallBack(int result); -void ZipFilePromiseCallBack(int result); -void UnzipFileAsyncCallBack(int result); -void UnzipFilePromiseCallBack(int result); +void ZipFileAsyncExecute(napi_env env, void *data); +void ZipFilePromiseExecute(napi_env env, void *data); +void UnzipFileAsyncExecute(napi_env env, void *data); +void UnzipFilePromiseExecute(napi_env env, void *data); napi_value UnwrapZipParam(CallZipUnzipParam ¶m, napi_env env, napi_value *args, size_t argc); napi_value UnwrapUnZipParam(CallZipUnzipParam ¶m, napi_env env, napi_value *args, size_t argc); napi_value ZipFileWrap(napi_env env, napi_callback_info info, AsyncZipCallbackInfo *asyncZipCallbackInfo); napi_value UnwrapStringParam(std::string &str, napi_env env, napi_value args); bool UnwrapOptionsParams(OPTIONS &options, napi_env env, napi_value arg); napi_value ZipFileAsync(napi_env env, napi_value *args, size_t argcAsync, AsyncZipCallbackInfo *asyncZipCallbackInfo); -napi_value UnzipFileAsync(napi_env env, napi_value *args, size_t argcAsync, AsyncZipCallbackInfo *asyncZipCallbackInfo); -void ZipAndUnzipFileAsyncCallBack(std::shared_ptr &zipAceCallbackInfo, int result); +napi_value UnzipFileAsync( + napi_env env, napi_value *args, size_t argcAsync, AsyncZipCallbackInfo *asyncZipCallbackInfo); +void ZipAndUnzipFileAsyncCallBack(const std::shared_ptr &zipAceCallbackInfo, int result); napi_value ZipFilePromise(napi_env env, AsyncZipCallbackInfo *asyncZipCallbackInfo); napi_value UnzipFilePromise(napi_env env, AsyncZipCallbackInfo *asyncZipCallbackInfo); void ZipAndUnzipFileAsyncCallBackInnerJsThread(uv_work_t *work, int status); @@ -325,11 +324,6 @@ napi_value NAPI_ZipFile(napi_env env, napi_callback_info info) ret = ZipFileWrap(env, info, asyncZipCallbackInfo); if (ret == nullptr) { - - if (g_zipAceCallbackInfo != nullptr) { - g_zipAceCallbackInfo.reset(); - g_zipAceCallbackInfo = nullptr; - } if (asyncZipCallbackInfo != nullptr) { delete asyncZipCallbackInfo; asyncZipCallbackInfo = nullptr; @@ -356,15 +350,15 @@ napi_value ZipFileWrap(napi_env env, napi_callback_info info, AsyncZipCallbackIn APP_LOGE("%{public}s, call unwrapWant failed.", __func__); return nullptr; } - g_zipAceCallbackInfo = std::make_shared(); - if (g_zipAceCallbackInfo == nullptr) { + + asyncZipCallbackInfo->aceCallback = std::make_shared(); + if (asyncZipCallbackInfo->aceCallback == nullptr) { APP_LOGE("%{public}s, call param failed.", __func__); return nullptr; } - asyncZipCallbackInfo->aceCallback = g_zipAceCallbackInfo; - g_zipAceCallbackInfo->param = param; - g_zipAceCallbackInfo->env = env; + asyncZipCallbackInfo->aceCallback->param = param; + asyncZipCallbackInfo->aceCallback->env = env; if (argcAsync > PARAM3) { ret = ZipFileAsync(env, args, argcAsync, asyncZipCallbackInfo); } else { @@ -372,6 +366,7 @@ napi_value ZipFileWrap(napi_env env, napi_callback_info info, AsyncZipCallbackIn } return ret; } + napi_value ZipFilePromise(napi_env env, AsyncZipCallbackInfo *asyncZipCallbackInfo) { APP_LOGI("%{public}s, promise.", __func__); @@ -385,23 +380,12 @@ napi_value ZipFilePromise(napi_env env, AsyncZipCallbackInfo *asyncZipCallbackIn napi_deferred deferred; napi_value promise = 0; NAPI_CALL(env, napi_create_promise(env, &deferred, &promise)); - g_zipAceCallbackInfo->deferred = deferred; + asyncZipCallbackInfo->aceCallback->deferred = deferred; napi_create_async_work( env, nullptr, resourceName, - [](napi_env env, void *data) { - APP_LOGI("NAPI_ZipFile_Promise, worker pool thread execute."); - AsyncZipCallbackInfo *asyncCallbackInfo = static_cast(data); - if (asyncCallbackInfo != nullptr && asyncCallbackInfo->aceCallback != nullptr) { - Zip(FilePath(asyncCallbackInfo->aceCallback->param.src), - FilePath(asyncCallbackInfo->aceCallback->param.dest), - asyncCallbackInfo->aceCallback->param.options, - ZipFilePromiseCallBack, - false); - } - APP_LOGI("NAPI_ZipFile_Promise, worker pool thread execute end."); - }, + ZipFilePromiseExecute, [](napi_env env, napi_status status, void *data) { APP_LOGI("NAPI_ZipFile_Promise, main event thread complete."); AsyncZipCallbackInfo *asyncCallbackInfo = static_cast(data); @@ -569,7 +553,6 @@ napi_value UnwrapUnZipParam(CallZipUnzipParam ¶m, napi_env env, napi_value * * * @return The return value from NAPI C++ to JS for the module. */ - napi_value ZipFileAsync(napi_env env, napi_value *args, size_t argcAsync, AsyncZipCallbackInfo *asyncZipCallbackInfo) { APP_LOGI("%{public}s, asyncCallback.", __func__); @@ -585,7 +568,7 @@ napi_value ZipFileAsync(napi_env env, napi_value *args, size_t argcAsync, AsyncZ NAPI_CALL_BASE(env, napi_typeof(env, args[PARAM3], &valuetype), nullptr); if (valuetype == napi_function) { // resultCallback: AsyncCallback - napi_create_reference(env, args[PARAM3], 1, &g_zipAceCallbackInfo->callback); + napi_create_reference(env, args[PARAM3], 1, &asyncZipCallbackInfo->aceCallback->callback); } else { APP_LOGE("%{public}s, args[3] error. It should be a function type.", __func__); return nullptr; @@ -595,20 +578,10 @@ napi_value ZipFileAsync(napi_env env, napi_value *args, size_t argcAsync, AsyncZ env, nullptr, resourceName, - [](napi_env env, void *data) { - APP_LOGI("NAPI_ZipFile_callback, worker pool thread execute."); - AsyncZipCallbackInfo *asyncCallbackInfo = (AsyncZipCallbackInfo *)data; - if (asyncCallbackInfo != nullptr && asyncCallbackInfo->aceCallback != nullptr) { - Zip(FilePath(asyncCallbackInfo->aceCallback->param.src), - FilePath(asyncCallbackInfo->aceCallback->param.dest), - asyncCallbackInfo->aceCallback->param.options, - ZipFileAsyncCallBack, - false); - } - }, + ZipFileAsyncExecute, [](napi_env env, napi_status status, void *data) { APP_LOGI("NAPI_ZipFile_callback, main event thread complete."); - AsyncZipCallbackInfo *asyncCallbackInfo = (AsyncZipCallbackInfo *)data; + AsyncZipCallbackInfo *asyncCallbackInfo = static_cast(data); napi_delete_async_work(env, asyncCallbackInfo->asyncWork); delete asyncCallbackInfo; }, @@ -653,11 +626,14 @@ napi_value NAPI_UnzipFile(napi_env env, napi_callback_info info) return nullptr; } - g_unzipAceCallbackInfo = std::make_shared(); - asyncZipCallbackInfo->aceCallback = g_unzipAceCallbackInfo; - g_unzipAceCallbackInfo->param = param; - g_unzipAceCallbackInfo->env = env; + asyncZipCallbackInfo->aceCallback = std::make_shared(); + if (asyncZipCallbackInfo->aceCallback == nullptr) { + APP_LOGE("%{public}s, call param failed.", __func__); + return nullptr; + } + asyncZipCallbackInfo->aceCallback->param = param; + asyncZipCallbackInfo->aceCallback->env = env; if (argcAsync > PARAM3) { ret = UnzipFileAsync(env, args, argcAsync, asyncZipCallbackInfo); } else { @@ -665,10 +641,6 @@ napi_value NAPI_UnzipFile(napi_env env, napi_callback_info info) } if (ret == nullptr) { APP_LOGE("%{public}s,ret == nullptr", __func__); - if (g_unzipAceCallbackInfo != nullptr) { - g_unzipAceCallbackInfo.reset(); - g_unzipAceCallbackInfo = nullptr; - } if (asyncZipCallbackInfo != nullptr) { napi_delete_async_work(env, asyncZipCallbackInfo->asyncWork); delete asyncZipCallbackInfo; @@ -690,22 +662,12 @@ napi_value UnzipFilePromise(napi_env env, AsyncZipCallbackInfo *asyncZipCallback napi_deferred deferred; napi_value promise = 0; NAPI_CALL(env, napi_create_promise(env, &deferred, &promise)); - g_unzipAceCallbackInfo->deferred = deferred; + asyncZipCallbackInfo->aceCallback->deferred = deferred; napi_create_async_work( env, nullptr, resourceName, - [](napi_env env, void *data) { - APP_LOGI("NAPI_UnzipFile_Promise, worker pool thread execute."); - AsyncZipCallbackInfo *asyncCallbackInfo = static_cast(data); - if (asyncCallbackInfo != nullptr && asyncCallbackInfo->aceCallback != nullptr) { - Unzip(FilePath(asyncCallbackInfo->aceCallback->param.src), - FilePath(asyncCallbackInfo->aceCallback->param.dest), - asyncCallbackInfo->aceCallback->param.options, - UnzipFilePromiseCallBack); - } - APP_LOGI("NAPI_UnzipFile_Promise, worker pool thread execute end."); - }, + UnzipFilePromiseExecute, [](napi_env env, napi_status status, void *data) { APP_LOGI("NAPI_UnzipFile_Promise, main event thread complete."); AsyncZipCallbackInfo *asyncCallbackInfo = static_cast(data); @@ -734,7 +696,7 @@ napi_value UnzipFileAsync(napi_env env, napi_value *args, size_t argcAsync, Asyn NAPI_CALL_BASE(env, napi_typeof(env, args[PARAM3], &valuetype), nullptr); if (valuetype == napi_function) { // resultCallback: AsyncCallback - napi_create_reference(env, args[PARAM3], 1, &g_unzipAceCallbackInfo->callback); + napi_create_reference(env, args[PARAM3], 1, &asyncZipCallbackInfo->aceCallback->callback); } else { APP_LOGE("%{public}s, args[3] error. It should be a function type.", __func__); return nullptr; @@ -744,20 +706,10 @@ napi_value UnzipFileAsync(napi_env env, napi_value *args, size_t argcAsync, Asyn env, nullptr, resourceName, - [](napi_env env, void *data) { - APP_LOGI("NAPI_UnzipFile, worker pool thread execute."); - AsyncZipCallbackInfo *asyncCallbackInfo = (AsyncZipCallbackInfo *)data; - // Unzip - if (asyncCallbackInfo != nullptr && asyncCallbackInfo->aceCallback != nullptr) { - Unzip(FilePath(asyncCallbackInfo->aceCallback->param.src), - FilePath(asyncCallbackInfo->aceCallback->param.dest), - asyncCallbackInfo->aceCallback->param.options, - UnzipFileAsyncCallBack); - } - }, + UnzipFileAsyncExecute, [](napi_env env, napi_status status, void *data) { APP_LOGI("NAPI_UnzipFile, main event thread complete."); - AsyncZipCallbackInfo *asyncCallbackInfo = (AsyncZipCallbackInfo *)data; + AsyncZipCallbackInfo *asyncCallbackInfo = static_cast(data); napi_delete_async_work(env, asyncCallbackInfo->asyncWork); delete asyncCallbackInfo; }, @@ -770,37 +722,101 @@ napi_value UnzipFileAsync(napi_env env, napi_value *args, size_t argcAsync, Asyn return result; } // ZipFile callback -void ZipFileAsyncCallBack(int result) +void ZipFileAsyncExecute(napi_env env, void *data) { - if (g_zipAceCallbackInfo != nullptr) { - g_zipAceCallbackInfo->isCallBack = true; + APP_LOGI("NAPI_ZipFile_Async_Execute, worker pool thread execute."); + AsyncZipCallbackInfo *asyncCallbackInfo = static_cast(data); + if (asyncCallbackInfo == nullptr || asyncCallbackInfo->aceCallback == nullptr) { + APP_LOGE("NAPI_ZipFile_Async_Execute, input parameters error."); + return; } - ZipAndUnzipFileAsyncCallBack(g_zipAceCallbackInfo, result); + + auto zipCallBack = [zipCallBackInfo = asyncCallbackInfo->aceCallback](int result) { + if (zipCallBackInfo != nullptr) { + zipCallBackInfo->isCallBack = true; + } + ZipAndUnzipFileAsyncCallBack(zipCallBackInfo, result); + }; + + Zip(FilePath(asyncCallbackInfo->aceCallback->param.src), + FilePath(asyncCallbackInfo->aceCallback->param.dest), + asyncCallbackInfo->aceCallback->param.options, + zipCallBack, + false); + APP_LOGI("NAPI_ZipFile_Async_Execute, worker pool thread execute end."); } + // ZipFile Promise -void ZipFilePromiseCallBack(int result) +void ZipFilePromiseExecute(napi_env env, void *data) { - if (g_zipAceCallbackInfo != nullptr) { - g_zipAceCallbackInfo->isCallBack = false; + APP_LOGI("NAPI_ZipFile_Promise_Execute, worker pool thread execute."); + AsyncZipCallbackInfo *asyncCallbackInfo = static_cast(data); + if (asyncCallbackInfo == nullptr || asyncCallbackInfo->aceCallback == nullptr) { + APP_LOGE("NAPI_ZipFile_Promise_Execute, input parameters error."); + return; } - ZipAndUnzipFileAsyncCallBack(g_zipAceCallbackInfo, result); + + auto zipCallBack = [zipCallBackInfo = asyncCallbackInfo->aceCallback](int result) { + if (zipCallBackInfo != nullptr) { + zipCallBackInfo->isCallBack = false; + } + ZipAndUnzipFileAsyncCallBack(zipCallBackInfo, result); + }; + + Zip(FilePath(asyncCallbackInfo->aceCallback->param.src), + FilePath(asyncCallbackInfo->aceCallback->param.dest), + asyncCallbackInfo->aceCallback->param.options, + zipCallBack, + false); + APP_LOGI("NAPI_ZipFile_Promise_Execute, worker pool thread execute end."); } + // UnzipFile callback -void UnzipFileAsyncCallBack(int result) +void UnzipFileAsyncExecute(napi_env env, void *data) { - if (g_unzipAceCallbackInfo != nullptr) { - g_unzipAceCallbackInfo->isCallBack = true; + APP_LOGI("NAPI_UnzipFile_Async_Execute, worker pool thread execute."); + AsyncZipCallbackInfo *asyncCallbackInfo = static_cast(data); + // Unzip + if (asyncCallbackInfo != nullptr && asyncCallbackInfo->aceCallback != nullptr) { + APP_LOGE("NAPI_UnzipFile_Async_Execute, input parameters error."); + return; } - ZipAndUnzipFileAsyncCallBack(g_unzipAceCallbackInfo, result); + + auto unZipCallBack = [zipCallBackInfo = asyncCallbackInfo->aceCallback](int result) { + if (zipCallBackInfo != nullptr) { + zipCallBackInfo->isCallBack = true; + } + ZipAndUnzipFileAsyncCallBack(zipCallBackInfo, result); + }; + Unzip(FilePath(asyncCallbackInfo->aceCallback->param.src), + FilePath(asyncCallbackInfo->aceCallback->param.dest), + asyncCallbackInfo->aceCallback->param.options, + unZipCallBack); + APP_LOGI("NAPI_UnzipFile_Async_Execute, worker pool thread execute end."); } // UnzipFile Promise -void UnzipFilePromiseCallBack(int result) +void UnzipFilePromiseExecute(napi_env env, void *data) { - if (g_unzipAceCallbackInfo != nullptr) { - g_unzipAceCallbackInfo->isCallBack = false; + APP_LOGI("NAPI_UnzipFile_Promise_Execute, worker pool thread execute."); + AsyncZipCallbackInfo *asyncCallbackInfo = static_cast(data); + if (asyncCallbackInfo != nullptr && asyncCallbackInfo->aceCallback != nullptr) { + APP_LOGE("NAPI_UnzipFile_Promise_Execute, input parameters error."); + return; } - ZipAndUnzipFileAsyncCallBack(g_unzipAceCallbackInfo, result); + + auto unZipCallBack = [zipCallBackInfo = asyncCallbackInfo->aceCallback](int result) { + if (zipCallBackInfo != nullptr) { + zipCallBackInfo->isCallBack = false; + } + ZipAndUnzipFileAsyncCallBack(zipCallBackInfo, result); + }; + Unzip(FilePath(asyncCallbackInfo->aceCallback->param.src), + FilePath(asyncCallbackInfo->aceCallback->param.dest), + asyncCallbackInfo->aceCallback->param.options, + unZipCallBack); + APP_LOGI("NAPI_UnzipFile_Promise_Execute, worker pool thread execute end."); } + void ZipAndUnzipFileAsyncCallBackInnerJsThread(uv_work_t *work) { if (work == nullptr) { @@ -844,7 +860,8 @@ void ZipAndUnzipFileAsyncCallBackInnerJsThread(uv_work_t *work) work = nullptr; } } -void ZipAndUnzipFileAsyncCallBack(std::shared_ptr &zipAceCallbackInfo, int result) + +void ZipAndUnzipFileAsyncCallBack(const std::shared_ptr &zipAceCallbackInfo, int result) { if (zipAceCallbackInfo == nullptr) { return; @@ -869,8 +886,6 @@ void ZipAndUnzipFileAsyncCallBack(std::shared_ptr &zipAceCallb } *asyncCallbackInfo = *zipAceCallbackInfo; asyncCallbackInfo->callbackResult = result; - zipAceCallbackInfo.reset(); - zipAceCallbackInfo = nullptr; work->data = (void *)asyncCallbackInfo; int rev = uv_queue_work( loop, @@ -897,7 +912,6 @@ void ZipAndUnzipFileAsyncCallBack(std::shared_ptr &zipAceCallb } } } - } // namespace LIBZIP } // namespace AppExecFwk } // namespace OHOS -- Gitee From bf1dc20d912b3acec92d3952aae907c1ef9d4796 Mon Sep 17 00:00:00 2001 From: xuchenghua09 Date: Wed, 13 Jul 2022 14:51:41 +0800 Subject: [PATCH 2/6] fix Js Promise thread not return result bug --- interfaces/kits/zip/kits/napi/napi_zlib.cpp | 79 +++++++++++++++++---- 1 file changed, 64 insertions(+), 15 deletions(-) diff --git a/interfaces/kits/zip/kits/napi/napi_zlib.cpp b/interfaces/kits/zip/kits/napi/napi_zlib.cpp index c70487e506..a84fea25b3 100755 --- a/interfaces/kits/zip/kits/napi/napi_zlib.cpp +++ b/interfaces/kits/zip/kits/napi/napi_zlib.cpp @@ -375,6 +375,11 @@ napi_value ZipFilePromise(napi_env env, AsyncZipCallbackInfo *asyncZipCallbackIn return nullptr; } + if (asyncZipCallbackInfo->aceCallback == nullptr) { + APP_LOGE("%{public}s, asyncZipCallbackInfo callback is nullptr.", __func__); + return nullptr; + } + napi_value resourceName = 0; NAPI_CALL(env, napi_create_string_latin1(env, __func__, NAPI_AUTO_LENGTH, &resourceName)); napi_deferred deferred; @@ -389,6 +394,16 @@ napi_value ZipFilePromise(napi_env env, AsyncZipCallbackInfo *asyncZipCallbackIn [](napi_env env, napi_status status, void *data) { APP_LOGI("NAPI_ZipFile_Promise, main event thread complete."); AsyncZipCallbackInfo *asyncCallbackInfo = static_cast(data); + + if (asyncCallbackInfo->executeResult != 0) { + napi_deferred deferred; + napi_value promise = 0; + NAPI_CALL_RETURN_VOID(env, napi_create_promise(env, &deferred, &promise)); + napi_value result = nullptr; + napi_create_int32(env, asyncCallbackInfo->executeResult, &result); + NAPI_CALL_RETURN_VOID(env, napi_resolve_deferred(env, deferred, result)); + } + napi_delete_async_work(env, asyncCallbackInfo->asyncWork); delete asyncCallbackInfo; asyncCallbackInfo = nullptr; @@ -671,6 +686,16 @@ napi_value UnzipFilePromise(napi_env env, AsyncZipCallbackInfo *asyncZipCallback [](napi_env env, napi_status status, void *data) { APP_LOGI("NAPI_UnzipFile_Promise, main event thread complete."); AsyncZipCallbackInfo *asyncCallbackInfo = static_cast(data); + + if (asyncCallbackInfo->executeResult != 0) { + napi_deferred deferred; + napi_value promise = 0; + NAPI_CALL_RETURN_VOID(env, napi_create_promise(env, &deferred, &promise)); + napi_value result = nullptr; + napi_create_int32(env, asyncCallbackInfo->executeResult, &result); + NAPI_CALL_RETURN_VOID(env, napi_resolve_deferred(env, deferred, result)); + } + napi_delete_async_work(env, asyncCallbackInfo->asyncWork); delete asyncCallbackInfo; asyncCallbackInfo = nullptr; @@ -728,21 +753,27 @@ void ZipFileAsyncExecute(napi_env env, void *data) AsyncZipCallbackInfo *asyncCallbackInfo = static_cast(data); if (asyncCallbackInfo == nullptr || asyncCallbackInfo->aceCallback == nullptr) { APP_LOGE("NAPI_ZipFile_Async_Execute, input parameters error."); + asyncCallbackInfo->executeResult = -1; return; } auto zipCallBack = [zipCallBackInfo = asyncCallbackInfo->aceCallback](int result) { if (zipCallBackInfo != nullptr) { - zipCallBackInfo->isCallBack = true; + APP_LOGE("NAPI_ZipFile_Async_Execute, task callbackInfo parameters error."); + return; } + + zipCallBackInfo->isCallBack = true; ZipAndUnzipFileAsyncCallBack(zipCallBackInfo, result); }; - Zip(FilePath(asyncCallbackInfo->aceCallback->param.src), + if (!Zip(FilePath(asyncCallbackInfo->aceCallback->param.src), FilePath(asyncCallbackInfo->aceCallback->param.dest), asyncCallbackInfo->aceCallback->param.options, zipCallBack, - false); + false)) { + asyncCallbackInfo->executeResult = -1; + } APP_LOGI("NAPI_ZipFile_Async_Execute, worker pool thread execute end."); } @@ -753,21 +784,27 @@ void ZipFilePromiseExecute(napi_env env, void *data) AsyncZipCallbackInfo *asyncCallbackInfo = static_cast(data); if (asyncCallbackInfo == nullptr || asyncCallbackInfo->aceCallback == nullptr) { APP_LOGE("NAPI_ZipFile_Promise_Execute, input parameters error."); + asyncCallbackInfo->executeResult = -1; return; } auto zipCallBack = [zipCallBackInfo = asyncCallbackInfo->aceCallback](int result) { - if (zipCallBackInfo != nullptr) { - zipCallBackInfo->isCallBack = false; + if (zipCallBackInfo == nullptr) { + APP_LOGE("NAPI_ZipFile_Promise_Execute, task callbackInfo parameters error."); + return; } + + zipCallBackInfo->isCallBack = false; ZipAndUnzipFileAsyncCallBack(zipCallBackInfo, result); }; - Zip(FilePath(asyncCallbackInfo->aceCallback->param.src), + if (!Zip(FilePath(asyncCallbackInfo->aceCallback->param.src), FilePath(asyncCallbackInfo->aceCallback->param.dest), asyncCallbackInfo->aceCallback->param.options, zipCallBack, - false); + false)) { + asyncCallbackInfo->executeResult = -1; + } APP_LOGI("NAPI_ZipFile_Promise_Execute, worker pool thread execute end."); } @@ -779,19 +816,25 @@ void UnzipFileAsyncExecute(napi_env env, void *data) // Unzip if (asyncCallbackInfo != nullptr && asyncCallbackInfo->aceCallback != nullptr) { APP_LOGE("NAPI_UnzipFile_Async_Execute, input parameters error."); + asyncCallbackInfo->executeResult = -1; return; } auto unZipCallBack = [zipCallBackInfo = asyncCallbackInfo->aceCallback](int result) { - if (zipCallBackInfo != nullptr) { - zipCallBackInfo->isCallBack = true; + if (zipCallBackInfo == nullptr) { + APP_LOGE("NAPI_UnzipFile_Async_Execute, task callbackInfo parameters error."); + return; } + + zipCallBackInfo->isCallBack = true; ZipAndUnzipFileAsyncCallBack(zipCallBackInfo, result); }; - Unzip(FilePath(asyncCallbackInfo->aceCallback->param.src), + if (!Unzip(FilePath(asyncCallbackInfo->aceCallback->param.src), FilePath(asyncCallbackInfo->aceCallback->param.dest), asyncCallbackInfo->aceCallback->param.options, - unZipCallBack); + unZipCallBack)) { + asyncCallbackInfo->executeResult = -1; + } APP_LOGI("NAPI_UnzipFile_Async_Execute, worker pool thread execute end."); } // UnzipFile Promise @@ -801,19 +844,25 @@ void UnzipFilePromiseExecute(napi_env env, void *data) AsyncZipCallbackInfo *asyncCallbackInfo = static_cast(data); if (asyncCallbackInfo != nullptr && asyncCallbackInfo->aceCallback != nullptr) { APP_LOGE("NAPI_UnzipFile_Promise_Execute, input parameters error."); + asyncCallbackInfo->executeResult = -1; return; } auto unZipCallBack = [zipCallBackInfo = asyncCallbackInfo->aceCallback](int result) { - if (zipCallBackInfo != nullptr) { - zipCallBackInfo->isCallBack = false; + if (zipCallBackInfo == nullptr) { + APP_LOGE("NAPI_UnzipFile_Promise_Execute, task callbackInfo parameters error."); + return; } + + zipCallBackInfo->isCallBack = false; ZipAndUnzipFileAsyncCallBack(zipCallBackInfo, result); }; - Unzip(FilePath(asyncCallbackInfo->aceCallback->param.src), + if (!Unzip(FilePath(asyncCallbackInfo->aceCallback->param.src), FilePath(asyncCallbackInfo->aceCallback->param.dest), asyncCallbackInfo->aceCallback->param.options, - unZipCallBack); + unZipCallBack)) { + asyncCallbackInfo->executeResult = -1; + } APP_LOGI("NAPI_UnzipFile_Promise_Execute, worker pool thread execute end."); } -- Gitee From f53ab61719d68bb47e825f571ab10a42c87ad295 Mon Sep 17 00:00:00 2001 From: xuchenghua09 Date: Wed, 13 Jul 2022 15:20:33 +0800 Subject: [PATCH 3/6] fix build error --- interfaces/kits/zip/kits/napi/napi_zlib_common.h | 1 + 1 file changed, 1 insertion(+) diff --git a/interfaces/kits/zip/kits/napi/napi_zlib_common.h b/interfaces/kits/zip/kits/napi/napi_zlib_common.h index b2a1fea182..2774b1fef5 100755 --- a/interfaces/kits/zip/kits/napi/napi_zlib_common.h +++ b/interfaces/kits/zip/kits/napi/napi_zlib_common.h @@ -50,6 +50,7 @@ struct ZlibCallbackInfo { struct AsyncZipCallbackInfo { napi_async_work asyncWork; std::shared_ptr aceCallback; + int executeResult = 0; }; bool UnwrapIntValue(napi_env env, napi_value jsValue, int &result); bool IsTypeForNapiValue(napi_env env, napi_value param, napi_valuetype expectType); -- Gitee From bd8974e294c2d8e7c2223774634358fce971c51d Mon Sep 17 00:00:00 2001 From: xuchenghua09 Date: Wed, 13 Jul 2022 15:20:33 +0800 Subject: [PATCH 4/6] fix build error Signed-off-by: xuchenghua09 --- interfaces/kits/zip/kits/napi/napi_zlib_common.h | 1 + 1 file changed, 1 insertion(+) diff --git a/interfaces/kits/zip/kits/napi/napi_zlib_common.h b/interfaces/kits/zip/kits/napi/napi_zlib_common.h index b2a1fea182..2774b1fef5 100755 --- a/interfaces/kits/zip/kits/napi/napi_zlib_common.h +++ b/interfaces/kits/zip/kits/napi/napi_zlib_common.h @@ -50,6 +50,7 @@ struct ZlibCallbackInfo { struct AsyncZipCallbackInfo { napi_async_work asyncWork; std::shared_ptr aceCallback; + int executeResult = 0; }; bool UnwrapIntValue(napi_env env, napi_value jsValue, int &result); bool IsTypeForNapiValue(napi_env env, napi_value param, napi_valuetype expectType); -- Gitee From fb7c0296c87b85a2edc970961c4b087e8c6b41f2 Mon Sep 17 00:00:00 2001 From: xuchenghua09 Date: Wed, 13 Jul 2022 15:35:43 +0800 Subject: [PATCH 5/6] fix code Signed-off-by: xuchenghua09 --- interfaces/kits/zip/kits/napi/napi_zlib.cpp | 38 ++++++++++++++++----- 1 file changed, 29 insertions(+), 9 deletions(-) diff --git a/interfaces/kits/zip/kits/napi/napi_zlib.cpp b/interfaces/kits/zip/kits/napi/napi_zlib.cpp index a84fea25b3..1be1fc6163 100755 --- a/interfaces/kits/zip/kits/napi/napi_zlib.cpp +++ b/interfaces/kits/zip/kits/napi/napi_zlib.cpp @@ -751,14 +751,19 @@ void ZipFileAsyncExecute(napi_env env, void *data) { APP_LOGI("NAPI_ZipFile_Async_Execute, worker pool thread execute."); AsyncZipCallbackInfo *asyncCallbackInfo = static_cast(data); - if (asyncCallbackInfo == nullptr || asyncCallbackInfo->aceCallback == nullptr) { - APP_LOGE("NAPI_ZipFile_Async_Execute, input parameters error."); + if (asyncCallbackInfo == nullptr) { + APP_LOGE("NAPI_ZipFile_Async_Execute, input info parameters error."); + return; + } + + if (asyncCallbackInfo->aceCallback == nullptr) { + APP_LOGE("NAPI_ZipFile_Async_Execute, input callback parameters error."); asyncCallbackInfo->executeResult = -1; return; } auto zipCallBack = [zipCallBackInfo = asyncCallbackInfo->aceCallback](int result) { - if (zipCallBackInfo != nullptr) { + if (zipCallBackInfo == nullptr) { APP_LOGE("NAPI_ZipFile_Async_Execute, task callbackInfo parameters error."); return; } @@ -782,8 +787,13 @@ void ZipFilePromiseExecute(napi_env env, void *data) { APP_LOGI("NAPI_ZipFile_Promise_Execute, worker pool thread execute."); AsyncZipCallbackInfo *asyncCallbackInfo = static_cast(data); - if (asyncCallbackInfo == nullptr || asyncCallbackInfo->aceCallback == nullptr) { - APP_LOGE("NAPI_ZipFile_Promise_Execute, input parameters error."); + if (asyncCallbackInfo == nullptr) { + APP_LOGE("NAPI_ZipFile_Promise_Execute, input info parameters error."); + return; + } + + if (asyncCallbackInfo->aceCallback == nullptr) { + APP_LOGE("NAPI_ZipFile_Promise_Execute, input callback parameters error."); asyncCallbackInfo->executeResult = -1; return; } @@ -814,8 +824,13 @@ void UnzipFileAsyncExecute(napi_env env, void *data) APP_LOGI("NAPI_UnzipFile_Async_Execute, worker pool thread execute."); AsyncZipCallbackInfo *asyncCallbackInfo = static_cast(data); // Unzip - if (asyncCallbackInfo != nullptr && asyncCallbackInfo->aceCallback != nullptr) { - APP_LOGE("NAPI_UnzipFile_Async_Execute, input parameters error."); + if (asyncCallbackInfo == nullptr) { + APP_LOGE("NAPI_UnzipFile_Async_Execute, input info parameters error."); + return; + } + + if (asyncCallbackInfo->aceCallback == nullptr) { + APP_LOGE("NAPI_UnzipFile_Async_Execute, input callback parameters error."); asyncCallbackInfo->executeResult = -1; return; } @@ -842,8 +857,13 @@ void UnzipFilePromiseExecute(napi_env env, void *data) { APP_LOGI("NAPI_UnzipFile_Promise_Execute, worker pool thread execute."); AsyncZipCallbackInfo *asyncCallbackInfo = static_cast(data); - if (asyncCallbackInfo != nullptr && asyncCallbackInfo->aceCallback != nullptr) { - APP_LOGE("NAPI_UnzipFile_Promise_Execute, input parameters error."); + if (asyncCallbackInfo == nullptr) { + APP_LOGE("NAPI_UnzipFile_Promise_Execute, input info parameters error."); + return; + } + + if (asyncCallbackInfo->aceCallback == nullptr) { + APP_LOGE("NAPI_UnzipFile_Promise_Execute, input callback parameters error."); asyncCallbackInfo->executeResult = -1; return; } -- Gitee From c8e5d2784bac67a1a1fbff4aced78e947252a377 Mon Sep 17 00:00:00 2001 From: xuchenghua09 Date: Wed, 13 Jul 2022 15:35:43 +0800 Subject: [PATCH 6/6] fix code Signed-off-by: xuchenghua09 --- interfaces/kits/zip/kits/napi/napi_zlib.cpp | 38 ++++++++++++++++----- 1 file changed, 29 insertions(+), 9 deletions(-) diff --git a/interfaces/kits/zip/kits/napi/napi_zlib.cpp b/interfaces/kits/zip/kits/napi/napi_zlib.cpp index a84fea25b3..1be1fc6163 100755 --- a/interfaces/kits/zip/kits/napi/napi_zlib.cpp +++ b/interfaces/kits/zip/kits/napi/napi_zlib.cpp @@ -751,14 +751,19 @@ void ZipFileAsyncExecute(napi_env env, void *data) { APP_LOGI("NAPI_ZipFile_Async_Execute, worker pool thread execute."); AsyncZipCallbackInfo *asyncCallbackInfo = static_cast(data); - if (asyncCallbackInfo == nullptr || asyncCallbackInfo->aceCallback == nullptr) { - APP_LOGE("NAPI_ZipFile_Async_Execute, input parameters error."); + if (asyncCallbackInfo == nullptr) { + APP_LOGE("NAPI_ZipFile_Async_Execute, input info parameters error."); + return; + } + + if (asyncCallbackInfo->aceCallback == nullptr) { + APP_LOGE("NAPI_ZipFile_Async_Execute, input callback parameters error."); asyncCallbackInfo->executeResult = -1; return; } auto zipCallBack = [zipCallBackInfo = asyncCallbackInfo->aceCallback](int result) { - if (zipCallBackInfo != nullptr) { + if (zipCallBackInfo == nullptr) { APP_LOGE("NAPI_ZipFile_Async_Execute, task callbackInfo parameters error."); return; } @@ -782,8 +787,13 @@ void ZipFilePromiseExecute(napi_env env, void *data) { APP_LOGI("NAPI_ZipFile_Promise_Execute, worker pool thread execute."); AsyncZipCallbackInfo *asyncCallbackInfo = static_cast(data); - if (asyncCallbackInfo == nullptr || asyncCallbackInfo->aceCallback == nullptr) { - APP_LOGE("NAPI_ZipFile_Promise_Execute, input parameters error."); + if (asyncCallbackInfo == nullptr) { + APP_LOGE("NAPI_ZipFile_Promise_Execute, input info parameters error."); + return; + } + + if (asyncCallbackInfo->aceCallback == nullptr) { + APP_LOGE("NAPI_ZipFile_Promise_Execute, input callback parameters error."); asyncCallbackInfo->executeResult = -1; return; } @@ -814,8 +824,13 @@ void UnzipFileAsyncExecute(napi_env env, void *data) APP_LOGI("NAPI_UnzipFile_Async_Execute, worker pool thread execute."); AsyncZipCallbackInfo *asyncCallbackInfo = static_cast(data); // Unzip - if (asyncCallbackInfo != nullptr && asyncCallbackInfo->aceCallback != nullptr) { - APP_LOGE("NAPI_UnzipFile_Async_Execute, input parameters error."); + if (asyncCallbackInfo == nullptr) { + APP_LOGE("NAPI_UnzipFile_Async_Execute, input info parameters error."); + return; + } + + if (asyncCallbackInfo->aceCallback == nullptr) { + APP_LOGE("NAPI_UnzipFile_Async_Execute, input callback parameters error."); asyncCallbackInfo->executeResult = -1; return; } @@ -842,8 +857,13 @@ void UnzipFilePromiseExecute(napi_env env, void *data) { APP_LOGI("NAPI_UnzipFile_Promise_Execute, worker pool thread execute."); AsyncZipCallbackInfo *asyncCallbackInfo = static_cast(data); - if (asyncCallbackInfo != nullptr && asyncCallbackInfo->aceCallback != nullptr) { - APP_LOGE("NAPI_UnzipFile_Promise_Execute, input parameters error."); + if (asyncCallbackInfo == nullptr) { + APP_LOGE("NAPI_UnzipFile_Promise_Execute, input info parameters error."); + return; + } + + if (asyncCallbackInfo->aceCallback == nullptr) { + APP_LOGE("NAPI_UnzipFile_Promise_Execute, input callback parameters error."); asyncCallbackInfo->executeResult = -1; return; } -- Gitee