merge sync into OpenHarmony-6.0-Release

分支差异整改

Created-by: Cui-Ziyuan1128
Commit-by: Cui-Ziyuan1128;louzhihao
Merged-by: openharmony_ci
Description: **IssueNo**:https://gitcode.com/openharmony/distributeddatamgr_datamgr_service/issues/2105?ref=&did=3279439#tid-3279439

**Description**:分支差异整改

**稳定性自检:**
| 自检项                                                       | 自检结果  |
| ------------------------------------------------------------ | -------- |
| 涉及跨进程调用的相关操作需要抛至主线程或加锁防止并发              |     y     |
| 成员变量进行赋值或创建需要排查并发                               |     y     |
| 谨慎在lambda表达式中使用引用捕获                                |     y     |
| 谨慎在未经拷贝的情况下使用外部传入的string、C字符串               |     y     |
| map\vector\list\set等stl模板类使用时需要排查并发                |     y     |
| 谨慎考虑加锁范围                                               |     y     |
| 在IPC通信中谨慎使用同步通信方式                                 |     y    |
| 禁止传递this指针至其他模块或线程(特别是eventhandler任务)        |     y     |
| 禁止将外部传入的裸指针在内部直接构造智能指针                      |     y     |
| 禁止多个独立创建的智能指针管理同一地址                           |     y     |
| 禁止在析构函数中抛异步任务                                      |     y     |
| 禁止js对象在非js线程(例如在IPC线程)创建、使用或销毁             |     y     |
| 禁止在对外接口中未经判空直接使用外部传入的指针                    |    y      |
| 禁止接口返回局部变量引用                                        |    y      |
| 禁止在信号函数中加锁                                            |     y     |
| 禁止在关键流程(SA启动、应用启动等主流程)执行耗时的操作           |     y     |
| 禁止将同一个cpp编译在不同的so中                                 |     y     |

**安全编码自检:**
| 自检项                                                          | 自检结果 |
| -------------------------------------------------------------- | -------- |
| 裸指针避免通过隐式转换构造为sptr                                 |     y     |
| json对象在取值之前必须先判断类型,避免类型不匹配                   |     y     |
| 序列化时必须对传入的数组大小进行校验,避免出现超大数组              |     y     |
| 避免使用未明确位宽的整型,选择使用int8_t、uint8_t等类型            |     y     |
| 外部传入的路径要做规范化校验,对路径中的.、..、../等特殊字符严格校验 |     y     |
| 指针变量、表示资源描述符的变量、bool变量必须赋初值                  |     y     |
| readParcelable获取的对象使用前需要判空                            |     y     |
| 分配和释放内存的函数需要成对出现                                   |     y     |
| 申请内存后异常退出前需要及时进行内存释放                            |     y     |
| 内存申请前必须对内存大小进行合法性校验                              |     y     |
| 内存分配后必须判断是否成功                                         |     y     |
| 禁止使用realloc、alloca函数                                       |     y     |
| 禁止打印文件路径、口令等敏感信息,如有需要,使用private修饰          |     y     |
| 禁止打印内存地址                                                  |     y     |
| 整数之间运算时必须严格检查,确保不会出现溢出、反转、除0               |     y     |
| 禁止对有符号整数进行位操作符运算                                    |     y     |
| 禁止对指针进行逻辑或位运算                                         |     y     |
| 循环次数如果收外部数据控制,需要检验其合法性                         |     y     |
| 禁止使用内存操作类危险函数,需要使用安全函数                         |     y     |
| 谨慎使用不可重入函数                                               |     y     |
| 必须检查安全函数的返回值,并进行正确处理                             |     y     |
| 禁止仅通过TokenType类型判断绕过权限校验                             |     y     |

**TDD Result**:
一个失败为已知问题,非此次提交引入
![image.png](https://raw.gitcode.com/user-images/assets/4421702/fa2ca39a-e93f-47ae-a630-46069d9d360d/image.png 'image.png')
**XTS Result**:
![image.png](https://raw.gitcode.com/user-images/assets/4421702/44bf3003-fb4b-4336-9350-b0767f1085fd/image.png 'image.png')
### 是否已执行L0用例
- [x] 已验证
- [ ] 不涉及。如不涉及,请写明理由


See merge request: openharmony/ability_ability_runtime!16624
This commit is contained in:
openharmony_ci
2025-09-25 19:30:23 +08:00
7 changed files with 81 additions and 8 deletions
@@ -22,6 +22,7 @@
#include <unordered_map>
#include "cpp/mutex.h"
#include "data_share_permission.h"
#include "dataobs_mgr_inner.h"
#include "dataobs_mgr_inner_common.h"
#include "dataobs_mgr_inner_ext.h"
@@ -102,11 +103,13 @@ private:
int32_t VerifyDataSharePermissionInner(Uri &uri, bool isRead, ObserverInfo &info);
int32_t NotifyChangeInner(Uri &uri, int32_t userId,
DataObsOption opt, bool isExtension);
void OnAddSystemAbility(int32_t systemAbilityId, const std::string &deviceId) override;
private:
static constexpr std::uint32_t TASK_COUNT_MAX = 50;
ffrt::mutex taskCountMutex_;
std::uint32_t taskCount_ = 0;
std::shared_ptr<TaskHandlerWrap> handler_;
std::shared_ptr<DataShare::DataSharePermission> permission_;
DataObsServiceRunningState state_;
@@ -63,6 +63,7 @@ DataObsMgrService::DataObsMgrService()
dataObsMgrInner_ = std::make_shared<DataObsMgrInner>();
dataObsMgrInnerExt_ = std::make_shared<DataObsMgrInnerExt>();
dataObsMgrInnerPref_ = std::make_shared<DataObsMgrInnerPref>();
permission_ = std::make_shared<DataShare::DataSharePermission>();
}
DataObsMgrService::~DataObsMgrService()
@@ -92,9 +93,23 @@ void DataObsMgrService::OnStart()
bool DataObsMgrService::Init()
{
handler_ = TaskHandlerWrap::GetFfrtHandler();
AddSystemAbilityListener(COMMON_EVENT_SERVICE_ID);
return true;
}
void DataObsMgrService::OnAddSystemAbility(int32_t systemAbilityId, const std::string &deviceId)
{
LOG_INFO("add system abilityid:%{public}d", systemAbilityId);
(void)deviceId;
if (permission_ == nullptr) {
return;
}
if (systemAbilityId == COMMON_EVENT_SERVICE_ID) {
permission_->SubscribeCommonEvent();
}
return;
}
void DataObsMgrService::OnStop()
{
TAG_LOGI(AAFwkTag::DBOBSMGR, "stop");
@@ -161,6 +176,7 @@ bool DataObsMgrService::IsDataMgrService(uint32_t tokenId, int32_t uid)
if (uid != DATA_MANAGER_SERVICE_UID) {
TAG_LOGE(AAFwkTag::DBOBSMGR, "request not from DataMgr, uid %{public}d, DataMgr %{public}d",
uid, DATA_MANAGER_SERVICE_UID);
return false;
}
return true;
}
@@ -259,7 +275,11 @@ int32_t DataObsMgrService::VerifyDataSharePermissionInner(Uri &uri, bool isRead,
uint64_t fullTokenId = info.fullTokenId;
int ret;
bool isExtension = info.isExtension;
std::tie(ret, info.permission) = DataShare::DataSharePermission::GetUriPermission(uri,
if (permission_ == nullptr) {
LOG_ERROR("permission_ nullptr");
return COMMON_ERROR;
}
std::tie(ret, info.permission) = permission_->GetUriPermission(uri,
info.userId, isRead, isExtension);
if (ret != DataShare::E_OK) {
info.errMsg.append(std::to_string(info.isExtension) + "_GetUriPermission");
@@ -45,12 +45,15 @@ ohos_unittest("dataobs_mgr_service_dump_test") {
external_deps = [
"ability_base:want",
"ability_runtime:app_manager",
"access_token:libaccesstoken_sdk",
"access_token:libnativetoken",
"access_token:libtoken_setproc",
"appspawn:appspawn_client",
"bundle_framework:appexecfwk_base",
"bundle_framework:appexecfwk_core",
"common_event_service:cesfwk_innerkits",
"c_utils:utils",
"data_share:datashare_permission",
"ffrt:libffrt",
"googletest:gtest_main",
"hilog:libhilog",
@@ -47,7 +47,10 @@ ohos_unittest("dataobs_mgr_service_second_test") {
external_deps = [
"ability_base:want",
"ability_base:zuri",
"access_token:libaccesstoken_sdk",
"common_event_service:cesfwk_innerkits",
"c_utils:utils",
"data_share:datashare_permission",
"ffrt:libffrt",
"googletest:gmock_main",
"googletest:gtest_main",
@@ -55,6 +58,7 @@ ohos_unittest("dataobs_mgr_service_second_test") {
"ipc:ipc_core",
"safwk:api_cache_manager",
"safwk:system_ability_fwk",
"samgr:samgr_proxy",
]
}
@@ -31,11 +31,11 @@ ohos_unittest("dataobs_mgr_service_test") {
sources = [ "dataobs_mgr_service_test.cpp" ]
configs = [ "${ability_runtime_services_path}/dataobsmgr:dataobsms_config" ]
cflags = [
"-fvisibility=hidden",
"-Dprivate=public",
"-Dprotected=public",
]
cflags = [
"-fvisibility=hidden",
"-Dprivate=public",
"-Dprotected=public",
]
if (target_cpu == "arm") {
cflags += [ "-DBINDER_IPC_32BIT" ]
}
@@ -49,9 +49,10 @@ ohos_unittest("dataobs_mgr_service_test") {
"ability_base:want",
"ability_base:zuri",
"access_token:libtoken_setproc",
"access_token:libaccesstoken_sdk",
"access_token:libaccesstoken_sdk",
"common_event_service:cesfwk_innerkits",
"c_utils:utils",
"data_share:datashare_permission",
"data_share:datashare_permission",
"ffrt:libffrt",
"googletest:gmock_main",
"googletest:gtest_main",
@@ -59,6 +60,7 @@ ohos_unittest("dataobs_mgr_service_test") {
"ipc:ipc_core",
"safwk:api_cache_manager",
"safwk:system_ability_fwk",
"samgr:samgr_proxy",
]
}
@@ -12,6 +12,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include <cstdint>
#include <memory>
#include "gtest/gtest.h"
@@ -22,6 +23,7 @@
#include "dataobs_mgr_interface.h"
#include "datashare_errno.h"
#include "mock_data_ability_observer_stub.h"
#include "system_ability_definition.h"
#include "token_setproc.h"
#define private public
#include "dataobs_mgr_service.h"
@@ -757,6 +759,42 @@ HWTEST_F(DataObsMgrServiceTest, AaFwk_DataObsMgrServiceTest_VerifyDataSharePermi
TAG_LOGI(AAFwkTag::DBOBSMGR, "AaFwk_DataObsMgrServiceTest_VerifyDataSharePermission_0100 end");
}
HWTEST_F(DataObsMgrServiceTest, AaFwk_DataObsMgrServiceTest_Init_0100, TestSize.Level1)
{
TAG_LOGI(AAFwkTag::DBOBSMGR, "AaFwk_DataObsMgrServiceTest_Init_0100 start");
auto dataObsMgrServer = std::make_shared<DataObsMgrService>();
EXPECT_NE(dataObsMgrServer->permission_, nullptr);
EXPECT_EQ(dataObsMgrServer->permission_->subscriber_, nullptr);
dataObsMgrServer->OnAddSystemAbility(COMMON_EVENT_SERVICE_ID, "");
EXPECT_NE(dataObsMgrServer->permission_->subscriber_, nullptr);
TAG_LOGI(AAFwkTag::DBOBSMGR, "AaFwk_DataObsMgrServiceTest_Init_0100 end");
}
HWTEST_F(DataObsMgrServiceTest, AaFwk_DataObsMgrServiceTest_Init_0200, TestSize.Level1)
{
TAG_LOGI(AAFwkTag::DBOBSMGR, "AaFwk_DataObsMgrServiceTest_Init_0200 start");
auto dataObsMgrServer = std::make_shared<DataObsMgrService>();
dataObsMgrServer->permission_ = nullptr;
dataObsMgrServer->OnAddSystemAbility(COMMON_EVENT_SERVICE_ID, "");
dataObsMgrServer = std::make_shared<DataObsMgrService>();
dataObsMgrServer->OnAddSystemAbility(0, "");
EXPECT_EQ(dataObsMgrServer->permission_->subscriber_, nullptr);
TAG_LOGI(AAFwkTag::DBOBSMGR, "AaFwk_DataObsMgrServiceTest_Init_0200 end");
}
HWTEST_F(DataObsMgrServiceTest, AaFwk_DataObsMgrServiceTest_VerifyDataSharePermissionInner_0100, TestSize.Level1)
{
TAG_LOGI(AAFwkTag::DBOBSMGR, "AaFwk_DataObsMgrServiceTest_VerifyDataSharePermissionInner_0100 start");
auto dataObsMgrServer = std::make_shared<DataObsMgrService>();
dataObsMgrServer->permission_ = nullptr;
Uri uri("");
ObserverInfo info;
int32_t ret = dataObsMgrServer->VerifyDataSharePermissionInner(uri, true, info);
EXPECT_EQ(ret, COMMON_ERROR);
TAG_LOGI(AAFwkTag::DBOBSMGR, "AaFwk_DataObsMgrServiceTest_VerifyDataSharePermissionInner_0100 end");
}
/*
* Feature: DataObsMgrService
* Function: test DATA_MANAGER_SERVICE_UID
@@ -55,7 +55,9 @@ ohos_unittest("dataobs_mgr_service_third_test") {
"access_token:libnativetoken",
"access_token:libtoken_setproc",
"access_token:libtokenid_sdk",
"common_event_service:cesfwk_innerkits",
"c_utils:utils",
"data_share:datashare_permission",
"ffrt:libffrt",
"googletest:gmock_main",
"googletest:gtest_main",
@@ -63,6 +65,7 @@ ohos_unittest("dataobs_mgr_service_third_test") {
"ipc:ipc_core",
"safwk:api_cache_manager",
"safwk:system_ability_fwk",
"samgr:samgr_proxy",
]
}