From fda5229ab8868ecba32c5a7e50dc9ad1505dcc9e Mon Sep 17 00:00:00 2001 From: pxh123456789 Date: Wed, 6 Aug 2025 08:49:41 +0000 Subject: [PATCH 1/2] fix potential invalid address Signed-off-by: pxh123456789 --- .../detail_enhance_napi_formal.cpp | 39 +++++++++---------- .../kits/js/detail_enhance_napi_formal.h | 2 +- 2 files changed, 19 insertions(+), 22 deletions(-) diff --git a/framework/capi/image_processing/detail_enhance_napi_formal.cpp b/framework/capi/image_processing/detail_enhance_napi_formal.cpp index 37e53ef..e76df21 100644 --- a/framework/capi/image_processing/detail_enhance_napi_formal.cpp +++ b/framework/capi/image_processing/detail_enhance_napi_formal.cpp @@ -86,14 +86,14 @@ void VpeNapi::ThrowExceptionError(napi_env env, const int32_t errCode, const std napi_throw_error(env, errCodeStr.c_str(), errMsg.c_str()); } -bool VpeNapi::PrepareNapiEnv(napi_env env, napi_callback_info info, NapiValues* nVal) +bool VpeNapi::PrepareNapiEnv(napi_env env, napi_callback_info info, NapiValues* nVal, napi_value* argValue) { CHECK_AND_RETURN_RET_LOG(nVal != nullptr, false, "nVal == nullptr"); if (napi_get_undefined(env, &(nVal->result)) != napi_ok) { VPE_LOGE("Get undefined result failed"); return false; } - nVal->status = napi_get_cb_info(env, info, &(nVal->argc), nVal->argv, &(nVal->thisVar), nullptr); + nVal->status = napi_get_cb_info(env, info, &(nVal->argc), argValue, &(nVal->thisVar), nullptr); if (nVal->status != napi_ok) { VPE_LOGE("fail to napi_get_cb_info"); return false; @@ -155,8 +155,7 @@ bool VpeNapi::ParseDetailEnhanceParameter(napi_env env, napi_callback_info info) NapiValues nVal; nVal.argc = NUM_4; // Use the maximum value to initialize argc before executing PrepareNapiEnv napi_value argValue[NUM_4] = {0}; - nVal.argv = argValue; - CHECK_AND_RETURN_RET_LOG(PrepareNapiEnv(env, info, &nVal), false, "PrepareNapiEnv failed"); + CHECK_AND_RETURN_RET_LOG(PrepareNapiEnv(env, info, &nVal, argValue), false, "PrepareNapiEnv failed"); if (nVal.argc != NUM_2 && nVal.argc != NUM_3 && nVal.argc != NUM_4) { VPE_LOGE("Invalid args count %{public}zu", nVal.argc); return false; @@ -169,28 +168,28 @@ bool VpeNapi::ParseDetailEnhanceParameter(napi_env env, napi_callback_info info) } CHECK_AND_RETURN_RET_LOG(detailContext_->inputPixelMap != nullptr, false, "inputPixelMap is nullptr!"); if (nVal.argc == NUM_2) { // 2 parameter: pixelmap scaleRatio - CHECK_AND_RETURN_RET_LOG(ConfigResolutionBasedOnRatio(env, nVal.argv[NUM_1], detailContext_), + CHECK_AND_RETURN_RET_LOG(ConfigResolutionBasedOnRatio(env, argValue[NUM_1], detailContext_), false, "ConfigResolutionBasedOnRatio failed"); detailContext_->qualityLevel = DETAIL_ENH_LEVEL_LOW; // default as low level } if (nVal.argc == NUM_3) { // 3 parameter: pixelmap scaleRatio level / pixelmap x y double valueToCheck = 0; - CHECK_AND_RETURN_RET_LOG(napi_get_value_double(env, nVal.argv[NUM_2], &valueToCheck) == napi_ok, + CHECK_AND_RETURN_RET_LOG(napi_get_value_double(env, argValue[NUM_2], &valueToCheck) == napi_ok, false, "failed to parse"); if (valueToCheck >= 0 && valueToCheck <= 3) { // if valueToCheck in [0,3], valueToCheck should be level. - CHECK_AND_RETURN_RET_LOG(ConfigResolutionBasedOnRatio(env, nVal.argv[NUM_1], detailContext_), false, + CHECK_AND_RETURN_RET_LOG(ConfigResolutionBasedOnRatio(env, argValue[NUM_1], detailContext_), false, "ConfigResolutionBasedOnRatio failed"); detailContext_->qualityLevel = static_cast(valueToCheck); } else { - CHECK_AND_RETURN_RET_LOG(ConfigResolution(env, nVal.argv[NUM_1], nVal.argv[NUM_2], detailContext_), + CHECK_AND_RETURN_RET_LOG(ConfigResolution(env, argValue[NUM_1], argValue[NUM_2], detailContext_), false, "ConfigResolution failed"); detailContext_->qualityLevel = DETAIL_ENH_LEVEL_LOW; // default as low level } } if (nVal.argc == NUM_4) { // 4 parameter: pixelmap x y level - CHECK_AND_RETURN_RET_LOG(ConfigResolution(env, nVal.argv[NUM_1], nVal.argv[NUM_2], detailContext_), + CHECK_AND_RETURN_RET_LOG(ConfigResolution(env, argValue[NUM_1], argValue[NUM_2], detailContext_), false, "ConfigResolution failed"); - CHECK_AND_RETURN_RET_LOG(napi_get_value_int32(env, nVal.argv[NUM_3], + CHECK_AND_RETURN_RET_LOG(napi_get_value_int32(env, argValue[NUM_3], &(detailContext_->qualityLevel)) == napi_ok, false, "Arg 3 type mismatch"); } return true; @@ -679,8 +678,7 @@ bool VpeNapi::ParseDetailImageParameter(napi_env env, napi_callback_info info, N std::lock_guard lock(g_contrastLock); nVal.argc = NUM_9; napi_value argValue[NUM_9] = {0}; - nVal.argv = argValue; - if (!PrepareNapiEnv(env, info, &nVal)) { + if (!PrepareNapiEnv(env, info, &nVal, argValue)) { return false; } if (nVal.argc != NUM_9) { @@ -692,20 +690,20 @@ bool VpeNapi::ParseDetailImageParameter(napi_env env, napi_callback_info info, N contrastContext_->inputPixelMap = PixelMapNapi::GetPixelMap(env, argValue[NUM_0]); CHECK_AND_RETURN_RET_LOG(contrastContext_->inputPixelMap != nullptr, false, "contrastContext_->srcPixelMap == nullptr, resuse history"); - CHECK_AND_RETURN_RET_LOG(napi_get_value_int32(env, nVal.argv[NUM_1], + CHECK_AND_RETURN_RET_LOG(napi_get_value_int32(env, argValue[NUM_1], &(contrastContext_->pixelmapId)) == napi_ok, false, "Arg 1 type mismatch"); CHECK_AND_RETURN_RET_LOG(ParseRect(env, argValue[NUM_2], contrastContext_->curPixelmapArea), false, "parse pixelmap area failed"); CHECK_AND_RETURN_RET_LOG(ParseRect(env, argValue[NUM_3], contrastContext_->displayArea), false, "parse display area failed"); CHECK_AND_RETURN_RET_LOG(ParseSize(env, argValue[NUM_4]), false, "parse resolution of original image failed"); - CHECK_AND_RETURN_RET_LOG(napi_get_value_bool(env, nVal.argv[NUM_5], + CHECK_AND_RETURN_RET_LOG(napi_get_value_bool(env, argValue[NUM_5], &(contrastContext_->genFinalEffect)) == napi_ok, false, "Arg 5 type mismatch"); - CHECK_AND_RETURN_RET_LOG(napi_get_value_double(env, nVal.argv[NUM_6], + CHECK_AND_RETURN_RET_LOG(napi_get_value_double(env, argValue[NUM_6], &(contrastContext_->maxRatio)) == napi_ok, false, "Arg 6 type mismatch"); - CHECK_AND_RETURN_RET_LOG(napi_get_value_int32(env, nVal.argv[NUM_7], + CHECK_AND_RETURN_RET_LOG(napi_get_value_int32(env, argValue[NUM_7], &(contrastContext_->animationDuration)) == napi_ok, false, "Arg 7 type mismatch"); - CHECK_AND_RETURN_RET_LOG(napi_get_value_double(env, nVal.argv[NUM_8], + CHECK_AND_RETURN_RET_LOG(napi_get_value_double(env, argValue[NUM_8], &(contrastContext_->curRatio)) == napi_ok, false, "Arg 8 type mismatch"); } contrastContext_->fullRatio = std::min( @@ -727,8 +725,7 @@ bool VpeNapi::ParseLCDParameter(napi_env env, napi_callback_info info, NapiValue std::lock_guard lock(g_contrastLock); nVal.argc = NUM_3; napi_value argValue[NUM_3] = {0}; - nVal.argv = argValue; - if (!PrepareNapiEnv(env, info, &nVal)) { + if (!PrepareNapiEnv(env, info, &nVal, argValue)) { return false; } if (nVal.argc != NUM_3) { @@ -739,9 +736,9 @@ bool VpeNapi::ParseLCDParameter(napi_env env, napi_callback_info info, NapiValue false, "Arg 0 type is not pixelmap"); contrastContext_->lcdPixelMap = PixelMapNapi::GetPixelMap(env, argValue[NUM_0]); CHECK_AND_RETURN_RET_LOG(contrastContext_->lcdPixelMap != nullptr, false, "pixelmap is nullptr"); - CHECK_AND_RETURN_RET_LOG(napi_get_value_int32(env, nVal.argv[NUM_1], + CHECK_AND_RETURN_RET_LOG(napi_get_value_int32(env, argValue[NUM_1], &(contrastContext_->contentId)) == napi_ok, false, "Failed to parse lcd param. Arg 1 type mismatch"); - CHECK_AND_RETURN_RET_LOG(napi_get_value_double(env, nVal.argv[NUM_2], + CHECK_AND_RETURN_RET_LOG(napi_get_value_double(env, argValue[NUM_2], &(contrastContext_->defaultRatio)) == napi_ok, false, "Failed to parse lcd param. Arg 2 type mismatch"); CHECK_AND_RETURN_RET_LOG(contrastContext_->lcdPixelMap->GetWidth() > 0 && contrastContext_->lcdPixelMap->GetHeight() > 0, false, "invalid resolution"); diff --git a/interfaces/kits/js/detail_enhance_napi_formal.h b/interfaces/kits/js/detail_enhance_napi_formal.h index 88211cf..544febf 100644 --- a/interfaces/kits/js/detail_enhance_napi_formal.h +++ b/interfaces/kits/js/detail_enhance_napi_formal.h @@ -92,7 +92,7 @@ private: static thread_local std::shared_ptr contrastContext_; static thread_local std::shared_ptr detailContext_; - static bool PrepareNapiEnv(napi_env env, napi_callback_info info, NapiValues* nVal); + static bool PrepareNapiEnv(napi_env env, napi_callback_info info, NapiValues* nVal, napi_value* argValue); static bool ParseRect(napi_env env, napi_value nVal, OHOS::Rect& rect); static bool ParseSize(napi_env env, napi_value nVal); static std::shared_ptr PrepareDstPixelMap(napi_env env, VpeNapi::DetailEnhanceContext* context); -- Gitee From fc5c209c3ca981a2435f9f0a21537cc9837e23fd Mon Sep 17 00:00:00 2001 From: pxh123456789 Date: Mon, 25 Aug 2025 07:49:44 +0000 Subject: [PATCH 2/2] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E6=95=B4=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: pxh123456789 --- framework/capi/image_processing/detail_enhance_napi_formal.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/framework/capi/image_processing/detail_enhance_napi_formal.cpp b/framework/capi/image_processing/detail_enhance_napi_formal.cpp index e76df21..525eec7 100644 --- a/framework/capi/image_processing/detail_enhance_napi_formal.cpp +++ b/framework/capi/image_processing/detail_enhance_napi_formal.cpp @@ -89,6 +89,7 @@ void VpeNapi::ThrowExceptionError(napi_env env, const int32_t errCode, const std bool VpeNapi::PrepareNapiEnv(napi_env env, napi_callback_info info, NapiValues* nVal, napi_value* argValue) { CHECK_AND_RETURN_RET_LOG(nVal != nullptr, false, "nVal == nullptr"); + CHECK_AND_RETURN_RET_LOG(argValue != nullptr, false, "argValue == nullptr"); if (napi_get_undefined(env, &(nVal->result)) != napi_ok) { VPE_LOGE("Get undefined result failed"); return false; -- Gitee