mirror of
https://github.com/openharmony/developtools_syscap_codec.git
synced 2026-08-26 17:56:33 -04:00
!626 merge master into master
fix: 解决interfaces\inner_api\syscap_interface.c内存泄漏问题 Created-by: cuican86 Commit-by: cuican Merged-by: openharmony_ci Description: ### 一、内容说明(相关的Issue) https://gitcode.com/openharmony/developtools_syscap_codec/issues/351 ### 二、建议测试周期和提测地址 建议测试完成时间:xxxx.xx.xx 投产上线时间:xxxx.xx.xx 提测地址:CI环境/压测环境 测试账号: ### 三、变更内容 * 3.1 关联PR列表 * 3.2 数据库和部署说明 1. 常规更新 2. 重启unicorn 3. 重启sidekiq 4. 迁移任务:是否有迁移任务,没有写 "无" 5. rake脚本:`bundle exec xxx RAILS_ENV = production`;没有写 "无" * 3.4 其他技术优化内容(做了什么,变更了什么) - 重构了 xxxx 代码 - xxxx 算法优化 * 3.5 废弃通知(什么字段、方法弃用?) * 3.6 后向不兼容变更(是否有无法向后兼容的变更?) ### 四、研发自测点(自测哪些?冒烟用例全部自测?) 自测测试结论: 修复后无cppcheck扫描出的内存泄漏问题   TDD用例测试结果ok  ### 五、测试关注点(需要提醒QA重点关注的、可能会忽略的地方) 检查点: | 需求名称 | 是否影响xx公共模块 | 是否需要xx功能 | 需求升级是否依赖其他子产品 | |------|------------|----------|---------------| | xxx | 否 | 需要 | 不需要 | | | | | | 接口测试: 性能测试: 并发测试: 其他: See merge request: openharmony/developtools_syscap_codec!626
This commit is contained in:
@@ -334,40 +334,40 @@ FREE_SYSCAP_OUT:
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int32_t TransStringFormatAndSaveSyscap(struct FreeAfterDecodeRpcidInfo freeAfterDecodeRpcidInfo,
|
||||
static int32_t TransStringFormatAndSaveSyscap(struct FreeAfterDecodeRpcidInfo *freeAfterDecodeRpcidInfo,
|
||||
cJSON *sysCapArray, const char *inputFile)
|
||||
{
|
||||
// trans to string format
|
||||
sysCapArray = cJSON_GetObjectItem(freeAfterDecodeRpcidInfo.rpcidRoot, "syscap");
|
||||
sysCapArray = cJSON_GetObjectItem(freeAfterDecodeRpcidInfo->rpcidRoot, "syscap");
|
||||
if (sysCapArray == NULL || !cJSON_IsArray(sysCapArray)) {
|
||||
PRINT_ERR("Get syscap failed. Input file: %s\n", inputFile);
|
||||
return -1;
|
||||
}
|
||||
freeAfterDecodeRpcidInfo.sysCapArraySize = cJSON_GetArraySize(sysCapArray);
|
||||
if (freeAfterDecodeRpcidInfo.sysCapArraySize < 0) {
|
||||
freeAfterDecodeRpcidInfo->sysCapArraySize = cJSON_GetArraySize(sysCapArray);
|
||||
if (freeAfterDecodeRpcidInfo->sysCapArraySize < 0) {
|
||||
PRINT_ERR("Get syscap size failed. Input file: %s\n", inputFile);
|
||||
return -1;
|
||||
}
|
||||
// malloc for save os syscap index
|
||||
freeAfterDecodeRpcidInfo.osSysCapIndex = (uint16_t *)malloc(sizeof(uint16_t)
|
||||
* freeAfterDecodeRpcidInfo.sysCapArraySize);
|
||||
if (freeAfterDecodeRpcidInfo.osSysCapIndex == NULL) {
|
||||
freeAfterDecodeRpcidInfo->osSysCapIndex = (uint16_t *)malloc(sizeof(uint16_t) *
|
||||
freeAfterDecodeRpcidInfo->sysCapArraySize);
|
||||
if (freeAfterDecodeRpcidInfo->osSysCapIndex == NULL) {
|
||||
PRINT_ERR("malloc failed.\n");
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void PrintResultToOutBuffer(struct FreeAfterDecodeRpcidInfo freeAfterDecodeRpcidInfo, char *outBuffer,
|
||||
static void PrintResultToOutBuffer(struct FreeAfterDecodeRpcidInfo *freeAfterDecodeRpcidInfo, char *outBuffer,
|
||||
char *priSyscapArray, uint16_t indexOs, uint16_t indexPri)
|
||||
{
|
||||
int32_t ret = 0;
|
||||
uint32_t i;
|
||||
uint32_t outUint[RPCID_OUT_BUFFER] = {0};
|
||||
outUint[0] = *(uint32_t *)freeAfterDecodeRpcidInfo.contextBuffer;
|
||||
outUint[1] = *(uint32_t *)(freeAfterDecodeRpcidInfo.contextBuffer + sizeof(uint32_t));
|
||||
outUint[0] = *(uint32_t *)freeAfterDecodeRpcidInfo->contextBuffer;
|
||||
outUint[1] = *(uint32_t *)(freeAfterDecodeRpcidInfo->contextBuffer + sizeof(uint32_t));
|
||||
uint8_t *osOutUint = (uint8_t *)(outUint + 2);
|
||||
if (SetOsSysCapBitMap(osOutUint, 120, freeAfterDecodeRpcidInfo.osSysCapIndex, indexOs)) { // 120, len of osOutUint
|
||||
if (SetOsSysCapBitMap(osOutUint, 120, freeAfterDecodeRpcidInfo->osSysCapIndex, indexOs)) { // 120, len of osOutUint
|
||||
PRINT_ERR("Set os syscap bit map failed.\n");
|
||||
return;
|
||||
}
|
||||
@@ -405,7 +405,7 @@ static void PrintResultToOutBuffer(struct FreeAfterDecodeRpcidInfo freeAfterDeco
|
||||
}
|
||||
}
|
||||
|
||||
static void PartSysCapAndOutBuffer(struct FreeAfterDecodeRpcidInfo freeAfterDecodeRpcidInfo, char *outBuffer,
|
||||
static void PartSysCapAndOutBuffer(struct FreeAfterDecodeRpcidInfo *freeAfterDecodeRpcidInfo, char *outBuffer,
|
||||
char *priSyscapArray, cJSON *sysCapArray)
|
||||
{
|
||||
uint32_t i;
|
||||
@@ -414,23 +414,23 @@ static void PartSysCapAndOutBuffer(struct FreeAfterDecodeRpcidInfo freeAfterDeco
|
||||
uint16_t indexPri = 0;
|
||||
cJSON *cJsonTemp = NULL;
|
||||
|
||||
freeAfterDecodeRpcidInfo.sysCapDefine = CreateWholeSyscapJsonObj();
|
||||
(void)memset_s(priSyscapArray, freeAfterDecodeRpcidInfo.sysCapArraySize * SINGLE_SYSCAP_LEN,
|
||||
0, freeAfterDecodeRpcidInfo.sysCapArraySize * SINGLE_SYSCAP_LEN);
|
||||
freeAfterDecodeRpcidInfo.priSyscap = priSyscapArray;
|
||||
freeAfterDecodeRpcidInfo->sysCapDefine = CreateWholeSyscapJsonObj();
|
||||
(void)memset_s(priSyscapArray, freeAfterDecodeRpcidInfo->sysCapArraySize * SINGLE_SYSCAP_LEN,
|
||||
0, freeAfterDecodeRpcidInfo->sysCapArraySize * SINGLE_SYSCAP_LEN);
|
||||
freeAfterDecodeRpcidInfo->priSyscap = priSyscapArray;
|
||||
// part os syscap and ptivate syscap
|
||||
for (i = 0; i < (uint32_t)freeAfterDecodeRpcidInfo.sysCapArraySize; i++) {
|
||||
for (i = 0; i < (uint32_t)freeAfterDecodeRpcidInfo->sysCapArraySize; i++) {
|
||||
cJSON *cJsonItem = cJSON_GetArrayItem(sysCapArray, i);
|
||||
if (cJsonItem->valuestring == NULL) {
|
||||
cJSON_Delete(cJsonItem);
|
||||
return;
|
||||
}
|
||||
|
||||
cJsonTemp = cJSON_GetObjectItem(freeAfterDecodeRpcidInfo.sysCapDefine, cJsonItem->valuestring);
|
||||
cJsonTemp = cJSON_GetObjectItem(freeAfterDecodeRpcidInfo->sysCapDefine, cJsonItem->valuestring);
|
||||
if (cJsonTemp != NULL && cJSON_IsNumber(cJsonTemp)) {
|
||||
freeAfterDecodeRpcidInfo.osSysCapIndex[indexOs++] = (uint16_t)(cJsonTemp->valueint);
|
||||
freeAfterDecodeRpcidInfo->osSysCapIndex[indexOs++] = (uint16_t)(cJsonTemp->valueint);
|
||||
} else {
|
||||
ret = strcpy_s(freeAfterDecodeRpcidInfo.priSyscap, SINGLE_SYSCAP_LEN, cJsonItem->valuestring);
|
||||
ret = strcpy_s(freeAfterDecodeRpcidInfo->priSyscap, SINGLE_SYSCAP_LEN, cJsonItem->valuestring);
|
||||
if (ret != EOK) {
|
||||
PRINT_ERR("strcpy_s failed.\n");
|
||||
return;
|
||||
@@ -442,35 +442,35 @@ static void PartSysCapAndOutBuffer(struct FreeAfterDecodeRpcidInfo freeAfterDeco
|
||||
PrintResultToOutBuffer(freeAfterDecodeRpcidInfo, outBuffer, priSyscapArray, indexOs, indexPri);
|
||||
}
|
||||
|
||||
static char *FreeAfterDecodeRpcidToString(struct FreeAfterDecodeRpcidInfo freeAfterDecodeRpcidInfo, int32_t type,
|
||||
static char *FreeAfterDecodeRpcidToString(struct FreeAfterDecodeRpcidInfo *freeAfterDecodeRpcidInfo, int32_t type,
|
||||
char *outBuffer)
|
||||
{
|
||||
switch (type) {
|
||||
case FREE_MALLOC_PRISYSCAP_AFTER_DECODE_RPCID:
|
||||
SafeFree(freeAfterDecodeRpcidInfo.priSyscap);
|
||||
free(freeAfterDecodeRpcidInfo.osSysCapIndex);
|
||||
cJSON_Delete(freeAfterDecodeRpcidInfo.sysCapDefine);
|
||||
cJSON_Delete(freeAfterDecodeRpcidInfo.rpcidRoot);
|
||||
FreeContextBuffer(freeAfterDecodeRpcidInfo.contextBuffer);
|
||||
SafeFree(freeAfterDecodeRpcidInfo->priSyscap);
|
||||
free(freeAfterDecodeRpcidInfo->osSysCapIndex);
|
||||
cJSON_Delete(freeAfterDecodeRpcidInfo->sysCapDefine);
|
||||
cJSON_Delete(freeAfterDecodeRpcidInfo->rpcidRoot);
|
||||
FreeContextBuffer(freeAfterDecodeRpcidInfo->contextBuffer);
|
||||
break;
|
||||
case FREE_MALLOC_OSSYSCAP_AFTER_DECODE_RPCID:
|
||||
free(freeAfterDecodeRpcidInfo.osSysCapIndex);
|
||||
cJSON_Delete(freeAfterDecodeRpcidInfo.sysCapDefine);
|
||||
cJSON_Delete(freeAfterDecodeRpcidInfo.rpcidRoot);
|
||||
FreeContextBuffer(freeAfterDecodeRpcidInfo.contextBuffer);
|
||||
free(freeAfterDecodeRpcidInfo->osSysCapIndex);
|
||||
cJSON_Delete(freeAfterDecodeRpcidInfo->sysCapDefine);
|
||||
cJSON_Delete(freeAfterDecodeRpcidInfo->rpcidRoot);
|
||||
FreeContextBuffer(freeAfterDecodeRpcidInfo->contextBuffer);
|
||||
break;
|
||||
case FREE_WHOLE_SYSCAP_AFTER_DECODE_RPCID:
|
||||
cJSON_Delete(freeAfterDecodeRpcidInfo.sysCapDefine);
|
||||
cJSON_Delete(freeAfterDecodeRpcidInfo.rpcidRoot);
|
||||
FreeContextBuffer(freeAfterDecodeRpcidInfo.contextBuffer);
|
||||
cJSON_Delete(freeAfterDecodeRpcidInfo->sysCapDefine);
|
||||
cJSON_Delete(freeAfterDecodeRpcidInfo->rpcidRoot);
|
||||
FreeContextBuffer(freeAfterDecodeRpcidInfo->contextBuffer);
|
||||
break;
|
||||
case FREE_RPCID_ROOT_AFTER_DECODE_RPCID:
|
||||
cJSON_Delete(freeAfterDecodeRpcidInfo.rpcidRoot);
|
||||
FreeContextBuffer(freeAfterDecodeRpcidInfo.contextBuffer);
|
||||
cJSON_Delete(freeAfterDecodeRpcidInfo->rpcidRoot);
|
||||
FreeContextBuffer(freeAfterDecodeRpcidInfo->contextBuffer);
|
||||
break;
|
||||
case FREE_CONTEXT_OUT_AFTER_DECODE_RPCID:
|
||||
default:
|
||||
FreeContextBuffer(freeAfterDecodeRpcidInfo.contextBuffer);
|
||||
FreeContextBuffer(freeAfterDecodeRpcidInfo->contextBuffer);
|
||||
}
|
||||
return outBuffer;
|
||||
}
|
||||
@@ -494,23 +494,23 @@ char *DecodeRpcidToStringFormat(const char *inputFile)
|
||||
// check rpcid.sc
|
||||
if (CheckRpcidFormat(inputFile, &freeAfterDecodeRpcidInfo.contextBuffer, &bufferLen)) {
|
||||
PRINT_ERR("Check rpcid.sc format failed. Input file: %s\n", inputFile);
|
||||
return FreeAfterDecodeRpcidToString(freeAfterDecodeRpcidInfo, FREE_CONTEXT_OUT_AFTER_DECODE_RPCID, outBuffer);
|
||||
return FreeAfterDecodeRpcidToString(&freeAfterDecodeRpcidInfo, FREE_CONTEXT_OUT_AFTER_DECODE_RPCID, outBuffer);
|
||||
}
|
||||
|
||||
// parse rpcid to json
|
||||
freeAfterDecodeRpcidInfo.rpcidRoot = cJSON_CreateObject();
|
||||
if (freeAfterDecodeRpcidInfo.rpcidRoot == NULL) {
|
||||
PRINT_ERR("Failed to create cJSON object for rpcidRoot\n");
|
||||
return FreeAfterDecodeRpcidToString(freeAfterDecodeRpcidInfo, FREE_CONTEXT_OUT_AFTER_DECODE_RPCID, outBuffer);
|
||||
return FreeAfterDecodeRpcidToString(&freeAfterDecodeRpcidInfo, FREE_CONTEXT_OUT_AFTER_DECODE_RPCID, outBuffer);
|
||||
}
|
||||
|
||||
if (ParseRpcidToJson(freeAfterDecodeRpcidInfo.contextBuffer, bufferLen, freeAfterDecodeRpcidInfo.rpcidRoot)) {
|
||||
PRINT_ERR("Prase rpcid to json failed. Input file: %s\n", inputFile);
|
||||
return FreeAfterDecodeRpcidToString(freeAfterDecodeRpcidInfo, FREE_RPCID_ROOT_AFTER_DECODE_RPCID, outBuffer);
|
||||
return FreeAfterDecodeRpcidToString(&freeAfterDecodeRpcidInfo, FREE_RPCID_ROOT_AFTER_DECODE_RPCID, outBuffer);
|
||||
}
|
||||
ret = TransStringFormatAndSaveSyscap(freeAfterDecodeRpcidInfo, sysCapArray, inputFile);
|
||||
ret = TransStringFormatAndSaveSyscap(&freeAfterDecodeRpcidInfo, sysCapArray, inputFile);
|
||||
if (ret == -1) {
|
||||
return FreeAfterDecodeRpcidToString(freeAfterDecodeRpcidInfo, FREE_WHOLE_SYSCAP_AFTER_DECODE_RPCID, outBuffer);
|
||||
return FreeAfterDecodeRpcidToString(&freeAfterDecodeRpcidInfo, FREE_WHOLE_SYSCAP_AFTER_DECODE_RPCID, outBuffer);
|
||||
}
|
||||
|
||||
(void)memset_s(freeAfterDecodeRpcidInfo.osSysCapIndex, sizeof(uint16_t) * freeAfterDecodeRpcidInfo
|
||||
@@ -519,12 +519,12 @@ char *DecodeRpcidToStringFormat(const char *inputFile)
|
||||
priSyscapArray = (char *)malloc(freeAfterDecodeRpcidInfo.sysCapArraySize * SINGLE_SYSCAP_LEN);
|
||||
if (priSyscapArray == NULL) {
|
||||
PRINT_ERR("malloc(%u) failed.\n", (uint32_t)freeAfterDecodeRpcidInfo.sysCapArraySize * SINGLE_SYSCAP_LEN);
|
||||
return FreeAfterDecodeRpcidToString(freeAfterDecodeRpcidInfo, FREE_MALLOC_OSSYSCAP_AFTER_DECODE_RPCID,
|
||||
return FreeAfterDecodeRpcidToString(&freeAfterDecodeRpcidInfo, FREE_MALLOC_OSSYSCAP_AFTER_DECODE_RPCID,
|
||||
outBuffer);
|
||||
}
|
||||
|
||||
PartSysCapAndOutBuffer(freeAfterDecodeRpcidInfo, outBuffer, priSyscapArray, sysCapArray);
|
||||
return FreeAfterDecodeRpcidToString(freeAfterDecodeRpcidInfo, FREE_MALLOC_PRISYSCAP_AFTER_DECODE_RPCID, outBuffer);
|
||||
PartSysCapAndOutBuffer(&freeAfterDecodeRpcidInfo, outBuffer, priSyscapArray, sysCapArray);
|
||||
return FreeAfterDecodeRpcidToString(&freeAfterDecodeRpcidInfo, FREE_MALLOC_PRISYSCAP_AFTER_DECODE_RPCID, outBuffer);
|
||||
}
|
||||
|
||||
static int32_t CopySyscopToRet(struct PcidPriSyscapInfo *pcidPriSyscapInfo, const size_t allSyscapNum,
|
||||
|
||||
Reference in New Issue
Block a user