diff --git a/frameworks/bridge/declarative_frontend/jsview/js_calendar.cpp b/frameworks/bridge/declarative_frontend/jsview/js_calendar.cpp index b5848337f866ba3362dabaf13a3dddb40a040ccb..4d518a12975d5ad8657c95e80529a78ebaf0c157 100644 --- a/frameworks/bridge/declarative_frontend/jsview/js_calendar.cpp +++ b/frameworks/bridge/declarative_frontend/jsview/js_calendar.cpp @@ -479,12 +479,11 @@ void JSCalendar::SetDirection(const JSCallbackInfo& info) void JSCalendar::SetCurrentDayStyle(const JSCallbackInfo& info) { - auto obj = JSRef::Cast(info[0]); - if (info.Length() < 1 || !info[0]->IsObject()) { LOGW("Invalid params"); return; } + auto obj = JSRef::Cast(info[0]); if (Container::IsCurrentUseNewPipeline()) { NG::CurrentDayStyle currentDayStyle; Color dayColor; diff --git a/frameworks/bridge/declarative_frontend/jsview/js_canvas_renderer.cpp b/frameworks/bridge/declarative_frontend/jsview/js_canvas_renderer.cpp index 346f15d5cbab7222873856583067029205a9042b..18539b3f3ceb8c2887468654b34b66c14c55c9b5 100644 --- a/frameworks/bridge/declarative_frontend/jsview/js_canvas_renderer.cpp +++ b/frameworks/bridge/declarative_frontend/jsview/js_canvas_renderer.cpp @@ -915,7 +915,7 @@ void JSCanvasRenderer::JsCreateImageData(const JSCallbackInfo& info) void JSCanvasRenderer::JsPutImageData(const JSCallbackInfo& info) { - if (info.Length() < 1) { + if (info.Length() < 1 || !info[0]->IsObject()) { LOGE("The argv is wrong, it is supposed to have at least 1 argument"); return; } diff --git a/frameworks/bridge/declarative_frontend/jsview/js_distributed.cpp b/frameworks/bridge/declarative_frontend/jsview/js_distributed.cpp index 2a7029e4e76a3361720dcc5d0ceac1a7f03b1e86..21a658be2b93337b8ad6e8a5951a842f85be057c 100644 --- a/frameworks/bridge/declarative_frontend/jsview/js_distributed.cpp +++ b/frameworks/bridge/declarative_frontend/jsview/js_distributed.cpp @@ -62,7 +62,7 @@ void JSDistributed::Set(const JSCallbackInfo& args) return; #endif - if (args.Length() < 2) { + if (args.Length() < 2 || !args[0]->IsString()) { LOGW("fail to set distributed data"); return; } @@ -101,7 +101,7 @@ void JSDistributed::Get(const JSCallbackInfo& args) "emulator or a real device instead."); return; #endif - if (args.Length() < 1) { + if (args.Length() < 1 || !args[0]->IsString()) { LOGW("fail to Get distributed data"); return; } @@ -160,7 +160,7 @@ void JSDistributed::Delete(const JSCallbackInfo& args) "emulator or a real device instead."); return; #endif - if (args.Length() < 1) { + if (args.Length() < 1 || !args[0]->IsString()) { LOGW("fail to Delete distributed data"); return; } diff --git a/frameworks/bridge/declarative_frontend/jsview/js_form.cpp b/frameworks/bridge/declarative_frontend/jsview/js_form.cpp index 9655214454094cf9c5295400cf560fa885823102..6052f30eca5ccd8f08eed1566a764d1dbce10cc6 100644 --- a/frameworks/bridge/declarative_frontend/jsview/js_form.cpp +++ b/frameworks/bridge/declarative_frontend/jsview/js_form.cpp @@ -86,6 +86,7 @@ void JSForm::SetSize(const JSCallbackInfo& info) if (info.Length() == 0 || !info[0]->IsObject()) { LOGW("form set size fail due to FormComponent construct param is empty or type is not Object"); + return; } Dimension width = 0.0_vp; Dimension height = 0.0_vp; diff --git a/frameworks/bridge/declarative_frontend/jsview/js_image.cpp b/frameworks/bridge/declarative_frontend/jsview/js_image.cpp index bd9524fee9107dcec33eab8d79ea83e88ec039b5..a69c243f1ffdcfe075984507fc3f724a45d79031 100644 --- a/frameworks/bridge/declarative_frontend/jsview/js_image.cpp +++ b/frameworks/bridge/declarative_frontend/jsview/js_image.cpp @@ -311,6 +311,10 @@ void JSImage::SetAutoResize(bool autoResize) void JSImage::SetSyncLoad(const JSCallbackInfo& info) { + if (!info[0]->IsBoolean()) { + LOGE("info[0] is not a Boolean."); + return; + } ImageModel::GetInstance()->SetSyncMode(info[0]->ToBoolean()); } diff --git a/frameworks/bridge/declarative_frontend/jsview/js_indexer.cpp b/frameworks/bridge/declarative_frontend/jsview/js_indexer.cpp index 66c6570b930a0e4a643a05501187bacf1deaab8e..49d1bf5c1896a6b93452ba8dff715b650a4b490e 100644 --- a/frameworks/bridge/declarative_frontend/jsview/js_indexer.cpp +++ b/frameworks/bridge/declarative_frontend/jsview/js_indexer.cpp @@ -486,7 +486,7 @@ void JSIndexer::SetSelected(const JSCallbackInfo& args) void JSIndexer::SetPopupPosition(const JSCallbackInfo& args) { if (Container::IsCurrentUseNewPipeline()) { - if (args.Length() >= 1) { + if (args.Length() >= 1 && args[0]->IsObject()) { JSRef obj = JSRef::Cast(args[0]); float positionX = 0.0f; float positionY = 0.0f; diff --git a/frameworks/bridge/declarative_frontend/jsview/js_persistent.cpp b/frameworks/bridge/declarative_frontend/jsview/js_persistent.cpp index 4b6383174f9362dcab6bc7aa41d41b968bda1ed1..da07411d5ca57c79302bcb332648b49cf4ab33b6 100644 --- a/frameworks/bridge/declarative_frontend/jsview/js_persistent.cpp +++ b/frameworks/bridge/declarative_frontend/jsview/js_persistent.cpp @@ -60,7 +60,7 @@ void JSPersistent::Set(const JSCallbackInfo& args) "emulator or a real device instead."); return; #endif - if (args.Length() < 2) { + if (args.Length() < 2 || !args[0]->IsString() || !args[1]->IsString()) { LOGW("JSPersistent: Fail to set persistent data, args too few"); return; } @@ -92,7 +92,7 @@ void JSPersistent::Get(const JSCallbackInfo& args) "emulator or a real device instead."); return; #endif - if (args.Length() < 1) { + if (args.Length() < 1 || !args[0]->IsString()) { LOGW("JSPersistent: Failed to Get persistent data, args too few"); return; } @@ -116,7 +116,7 @@ void JSPersistent::Delete(const JSCallbackInfo& args) "emulator or a real device instead."); return; #endif - if (args.Length() < 1) { + if (args.Length() < 1 || !args[0]->IsString()) { LOGW("JSPersistent: Fail to Delete persistent data, args too few"); return; } diff --git a/frameworks/bridge/declarative_frontend/jsview/js_polygon.cpp b/frameworks/bridge/declarative_frontend/jsview/js_polygon.cpp index 677dedc8ae8c486321d4965f5950a3e2cb275708..0688ef8295bb5eef5a4245003f4c34deff3b61e5 100644 --- a/frameworks/bridge/declarative_frontend/jsview/js_polygon.cpp +++ b/frameworks/bridge/declarative_frontend/jsview/js_polygon.cpp @@ -83,7 +83,12 @@ void JSPolygon::JsPoints(const JSCallbackInfo& info) return; } else { for (size_t i = 0; i < pointsArray->Length(); i++) { - JSRef pointArray = pointsArray->GetValueAt(i); + JSRef val = pointsArray->GetValueAt(i); + if (!val->IsArray()) { + LOGE("point is not array."); + continue; + } + JSRef pointArray = JSRef::Cast(val); if (pointArray->GetValueAt(0)->IsNumber()) { shapePoint.first = Dimension(pointArray->GetValueAt(0)->ToNumber(), DimensionUnit::VP); } else if (pointArray->GetValueAt(0)->IsString()) { diff --git a/frameworks/bridge/declarative_frontend/jsview/js_polyline.cpp b/frameworks/bridge/declarative_frontend/jsview/js_polyline.cpp index b586719ccb16db8b5edf04f277502879b6aec53d..dec8f43bf7727ebcd55a1436c6edc680d46a7843 100644 --- a/frameworks/bridge/declarative_frontend/jsview/js_polyline.cpp +++ b/frameworks/bridge/declarative_frontend/jsview/js_polyline.cpp @@ -61,7 +61,12 @@ void JSPolyline::JSPoints(const JSCallbackInfo& info) return; } else { for (size_t i = 0; i < pointsArray->Length(); i++) { - JSRef pointArray = pointsArray->GetValueAt(i); + JSRef val = pointsArray->GetValueAt(i); + if (!val->IsArray()) { + LOGE("point is not array."); + continue; + } + JSRef pointArray = JSRef::Cast(val); if (pointArray->GetValueAt(0)->IsNumber()) { point.first = Dimension(pointArray->GetValueAt(0)->ToNumber(), DimensionUnit::VP); } else if (pointArray->GetValueAt(0)->IsString()) { diff --git a/frameworks/bridge/declarative_frontend/jsview/js_progress.cpp b/frameworks/bridge/declarative_frontend/jsview/js_progress.cpp index 47696667d84feda552f3cb93423ff63ebdc7b798..e85f0622388bec9e7280101bf27178912b951285 100644 --- a/frameworks/bridge/declarative_frontend/jsview/js_progress.cpp +++ b/frameworks/bridge/declarative_frontend/jsview/js_progress.cpp @@ -146,7 +146,7 @@ void JSProgress::SetColor(const JSCallbackInfo& info) void JSProgress::SetCircularStyle(const JSCallbackInfo& info) { - if (info.Length() < 1) { + if (info.Length() < 1 || !info[0]->IsObject()) { LOGE("The arg is wrong, it is supposed to have atleast 1 arguments"); return; } diff --git a/frameworks/bridge/declarative_frontend/jsview/js_refresh.cpp b/frameworks/bridge/declarative_frontend/jsview/js_refresh.cpp index 32d606aec2c577c25b27f3455287c4022de895a9..a6d7cfcfd9e1c32da80d8841c9f73ffe8db49d41 100644 --- a/frameworks/bridge/declarative_frontend/jsview/js_refresh.cpp +++ b/frameworks/bridge/declarative_frontend/jsview/js_refresh.cpp @@ -145,6 +145,9 @@ void JSRefresh::Pop() void JSRefresh::OnStateChange(const JSCallbackInfo& args) { + if (!args[0]->IsFunction()) { + return; + } auto jsFunc = AceType::MakeRefPtr(JSRef(), JSRef::Cast(args[0])); auto onStateChange = [execCtx = args.GetExecutionContext(), func = std::move(jsFunc)](const int32_t& value) { JAVASCRIPT_EXECUTION_SCOPE_WITH_CHECK(execCtx); @@ -157,6 +160,9 @@ void JSRefresh::OnStateChange(const JSCallbackInfo& args) void JSRefresh::OnRefreshing(const JSCallbackInfo& args) { + if (!args[0]->IsFunction()) { + return; + } auto jsFunc = AceType::MakeRefPtr(JSRef(), JSRef::Cast(args[0])); auto onRefreshing = [execCtx = args.GetExecutionContext(), func = std::move(jsFunc)]() { JAVASCRIPT_EXECUTION_SCOPE_WITH_CHECK(execCtx); diff --git a/frameworks/bridge/declarative_frontend/jsview/js_video.cpp b/frameworks/bridge/declarative_frontend/jsview/js_video.cpp index 996d93cc2d8fc74891ba6e06582e627768dc920a..7307a0074c8b5d44917a3c9a586e1830c09d51e2 100644 --- a/frameworks/bridge/declarative_frontend/jsview/js_video.cpp +++ b/frameworks/bridge/declarative_frontend/jsview/js_video.cpp @@ -162,6 +162,10 @@ void JSVideo::JsOnStart(const JSCallbackInfo& args) void JSVideo::JsOnPause(const JSCallbackInfo& args) { + if (!args[0]->IsFunction()) { + LOGE("OnPause args need a function."); + return; + } auto jsFunc = AceType::MakeRefPtr(JSRef(), JSRef::Cast(args[0])); auto onPause = [execCtx = args.GetExecutionContext(), func = std::move(jsFunc)](const std::string& param) { JAVASCRIPT_EXECUTION_SCOPE_WITH_CHECK(execCtx); @@ -174,6 +178,10 @@ void JSVideo::JsOnPause(const JSCallbackInfo& args) void JSVideo::JsOnFinish(const JSCallbackInfo& args) { + if (!args[0]->IsFunction()) { + LOGE("OnFinish args need a function."); + return; + } auto jsFunc = AceType::MakeRefPtr(JSRef(), JSRef::Cast(args[0])); auto onFinish = [execCtx = args.GetExecutionContext(), func = std::move(jsFunc)](const std::string& param) { JAVASCRIPT_EXECUTION_SCOPE_WITH_CHECK(execCtx); @@ -186,6 +194,10 @@ void JSVideo::JsOnFinish(const JSCallbackInfo& args) void JSVideo::JsOnFullscreenChange(const JSCallbackInfo& args) { + if (!args[0]->IsFunction()) { + LOGE("OnFullscreenChange args need a function."); + return; + } auto jsFunc = AceType::MakeRefPtr(JSRef(), JSRef::Cast(args[0])); auto OnFullScreenChange = [execCtx = args.GetExecutionContext(), func = std::move(jsFunc)]( const std::string& param) { @@ -199,6 +211,10 @@ void JSVideo::JsOnFullscreenChange(const JSCallbackInfo& args) void JSVideo::JsOnPrepared(const JSCallbackInfo& args) { + if (!args[0]->IsFunction()) { + LOGE("OnPrepared args need a function."); + return; + } auto jsFunc = AceType::MakeRefPtr(JSRef(), JSRef::Cast(args[0])); auto onPrepared = [execCtx = args.GetExecutionContext(), func = std::move(jsFunc)](const std::string& param) { JAVASCRIPT_EXECUTION_SCOPE_WITH_CHECK(execCtx); @@ -211,6 +227,10 @@ void JSVideo::JsOnPrepared(const JSCallbackInfo& args) void JSVideo::JsOnSeeking(const JSCallbackInfo& args) { + if (!args[0]->IsFunction()) { + LOGE("OnSeeking args need a function."); + return; + } auto jsFunc = AceType::MakeRefPtr(JSRef(), JSRef::Cast(args[0])); auto onSeeking = [execCtx = args.GetExecutionContext(), func = std::move(jsFunc)](const std::string& param) { JAVASCRIPT_EXECUTION_SCOPE_WITH_CHECK(execCtx); @@ -223,6 +243,10 @@ void JSVideo::JsOnSeeking(const JSCallbackInfo& args) void JSVideo::JsOnSeeked(const JSCallbackInfo& args) { + if (!args[0]->IsFunction()) { + LOGE("OnSeeked args need a function."); + return; + } auto jsFunc = AceType::MakeRefPtr(JSRef(), JSRef::Cast(args[0])); auto onSeeked = [execCtx = args.GetExecutionContext(), func = std::move(jsFunc)](const std::string& param) { JAVASCRIPT_EXECUTION_SCOPE_WITH_CHECK(execCtx); @@ -235,6 +259,10 @@ void JSVideo::JsOnSeeked(const JSCallbackInfo& args) void JSVideo::JsOnUpdate(const JSCallbackInfo& args) { + if (!args[0]->IsFunction()) { + LOGE("OnUpdate args need a function."); + return; + } auto jsFunc = AceType::MakeRefPtr(JSRef(), JSRef::Cast(args[0])); auto onUpdate = [execCtx = args.GetExecutionContext(), func = std::move(jsFunc)](const std::string& param) { JAVASCRIPT_EXECUTION_SCOPE_WITH_CHECK(execCtx); @@ -247,6 +275,10 @@ void JSVideo::JsOnUpdate(const JSCallbackInfo& args) void JSVideo::JsOnError(const JSCallbackInfo& args) { + if (!args[0]->IsFunction()) { + LOGE("OnError args need a function."); + return; + } auto jsFunc = AceType::MakeRefPtr(JSRef(), JSRef::Cast(args[0])); auto onError = [execCtx = args.GetExecutionContext(), func = std::move(jsFunc)](const std::string& param) { JAVASCRIPT_EXECUTION_SCOPE_WITH_CHECK(execCtx); diff --git a/frameworks/bridge/declarative_frontend/jsview/js_view.cpp b/frameworks/bridge/declarative_frontend/jsview/js_view.cpp index 47ecccf8dee195a44f0f9ac6b3cbd98d38924054..810042fe0d02f87a3f96195006e0d43e0f5941d4 100644 --- a/frameworks/bridge/declarative_frontend/jsview/js_view.cpp +++ b/frameworks/bridge/declarative_frontend/jsview/js_view.cpp @@ -312,6 +312,10 @@ void JSViewFullUpdate::FindChildById(const JSCallbackInfo& info) void JSViewFullUpdate::FindChildByIdForPreview(const JSCallbackInfo& info) { + if (!info[0]->IsString()) { + LOGE("info[0] is not a string."); + return; + } std::string viewId = info[0]->ToString(); if (viewId_ == viewId) { info.SetReturnValue(jsViewObject_); @@ -838,6 +842,10 @@ void JSViewPartialUpdate::IsFirstRender(const JSCallbackInfo& info) void JSViewPartialUpdate::FindChildByIdForPreview(const JSCallbackInfo& info) { LOGD("JSViewPartialUpdate::FindChildByIdForPreview"); + if (!info[0]->IsString()) { + LOGE("info[0] is not a string."); + return; + } std::string viewId = info[0]->ToString(); JSRef targetView = Framework::JSViewStackProcessor::GetViewById(viewId); info.SetReturnValue(targetView); diff --git a/frameworks/bridge/declarative_frontend/jsview/js_view_abstract.cpp b/frameworks/bridge/declarative_frontend/jsview/js_view_abstract.cpp index 49b8fb7fda1054f90c3ad966b1058bfd434bf6bb..35ab281476de21623d12d89f6f791b2d47fda60c 100644 --- a/frameworks/bridge/declarative_frontend/jsview/js_view_abstract.cpp +++ b/frameworks/bridge/declarative_frontend/jsview/js_view_abstract.cpp @@ -2394,6 +2394,10 @@ bool JSViewAbstract::ParseJsDimension(const JSRef& jsValue, Dimension& re return false; } JSRef args = jsObj->GetProperty("params"); + if (!args->IsArray()) { + LOGE("params is not array."); + return false; + } JSRef params = JSRef::Cast(args); auto param = params->GetValueAt(0); result = themeConstants->GetDimensionByName(param->ToString()); @@ -2810,6 +2814,10 @@ bool JSViewAbstract::ParseJsBool(const JSRef& jsValue, bool& result) return false; } JSRef args = jsObj->GetProperty("params"); + if (!args->IsArray()) { + LOGE("params is not array."); + return false; + } JSRef params = JSRef::Cast(args); auto param = params->GetValueAt(0); if (type->ToNumber() == static_cast(ResourceType::BOOLEAN)) { diff --git a/frameworks/bridge/declarative_frontend/jsview/js_web.cpp b/frameworks/bridge/declarative_frontend/jsview/js_web.cpp index 2bc4ce0512d93310154f37ae8a05ebcb375f138d..fec1618e1be147f8f29ea70d6a32264f94ff913a 100644 --- a/frameworks/bridge/declarative_frontend/jsview/js_web.cpp +++ b/frameworks/bridge/declarative_frontend/jsview/js_web.cpp @@ -3478,6 +3478,11 @@ void JSWeb::JsOnDragStart(const JSCallbackInfo& info) return; } + if (info.Length() < 1 || !info[0]->IsFunction()) { + LOGE("Param is invalid, it is not a function"); + return; + } + RefPtr jsOnDragStartFunc = AceType::MakeRefPtr(JSRef::Cast(info[0])); auto onDragStartId = [execCtx = info.GetExecutionContext(), func = std::move(jsOnDragStartFunc)]( const RefPtr& info, const std::string& extraParams) -> DragItemInfo { @@ -3520,6 +3525,11 @@ void JSWeb::JsOnDragEnter(const JSCallbackInfo& info) return; } + if (info.Length() < 1 || !info[0]->IsFunction()) { + LOGE("Param is invalid, it is not a function"); + return; + } + RefPtr jsOnDragEnterFunc = AceType::MakeRefPtr(JSRef::Cast(info[0])); auto onDragEnterId = [execCtx = info.GetExecutionContext(), func = std::move(jsOnDragEnterFunc)]( const RefPtr& info, const std::string& extraParams) { @@ -3540,6 +3550,11 @@ void JSWeb::JsOnDragMove(const JSCallbackInfo& info) return; } + if (info.Length() < 1 || !info[0]->IsFunction()) { + LOGE("Param is invalid, it is not a function"); + return; + } + RefPtr jsOnDragMoveFunc = AceType::MakeRefPtr(JSRef::Cast(info[0])); auto onDragMoveId = [execCtx = info.GetExecutionContext(), func = std::move(jsOnDragMoveFunc)]( const RefPtr& info, const std::string& extraParams) { @@ -3560,6 +3575,11 @@ void JSWeb::JsOnDragLeave(const JSCallbackInfo& info) return; } + if (info.Length() < 1 || !info[0]->IsFunction()) { + LOGE("Param is invalid, it is not a function"); + return; + } + RefPtr jsOnDragLeaveFunc = AceType::MakeRefPtr(JSRef::Cast(info[0])); auto onDragLeaveId = [execCtx = info.GetExecutionContext(), func = std::move(jsOnDragLeaveFunc)]( const RefPtr& info, const std::string& extraParams) { @@ -3580,6 +3600,11 @@ void JSWeb::JsOnDrop(const JSCallbackInfo& info) return; } + if (info.Length() < 1 || !info[0]->IsFunction()) { + LOGE("Param is invalid, it is not a function"); + return; + } + RefPtr jsOnDropFunc = AceType::MakeRefPtr(JSRef::Cast(info[0])); auto onDropId = [execCtx = info.GetExecutionContext(), func = std::move(jsOnDropFunc)]( const RefPtr& info, const std::string& extraParams) {