diff --git a/pwrapic/test/procapitest.c b/pwrapic/test/procapitest.c index 5a1ef32d3fab933bf36a5e46b5fe2260684378b2..acd288177f723eb5a789881597c9cf2f738d5559 100644 --- a/pwrapic/test/procapitest.c +++ b/pwrapic/test/procapitest.c @@ -28,6 +28,19 @@ static void TEST_PWR_PROC_QueryProcs(void) printf("PWR_PROC_QueryProcs. ret: %d num:%d\n", ret, num); } +static void TEST_PWR_PROC_QueryProcs_LongKeywords(void) +{ + char keywords[PWR_MAX_STRING_LEN] = "/init|"; + for(int i = 6; i < PWR_MAX_STRING_LEN - 1; ++i) + { + keywords[i] = 'a'; + } + pid_t procs[TEST_MAX_PROC_NUM] = {0}; + uint32_t num = TEST_MAX_PROC_NUM; + int ret = PWR_PROC_QueryProcs(keywords, procs, &num); + printf("PWR_PROC_QueryProcs. ret: %d num:%d\n", ret, num); +} + static void TEST_PWR_PROC_SetAndGetWattState(void) { int state = INVALIDE_STATE; @@ -187,6 +200,7 @@ static void TEST_PWR_PROC_SetServiceState(void) void TEST_PROC_AllFunc(void) { TEST_PWR_PROC_QueryProcs(); + TEST_PWR_PROC_QueryProcs_LongKeywords(); TEST_PWR_PROC_SetAndGetWattState(); TEST_PWR_PROC_SetAndGetWattAttrs(); TEST_PWR_PROC_AddAndDelWattProcs(); diff --git a/pwrapis/src/procservice.c b/pwrapis/src/procservice.c index b1c8f3d038e302bc21bb3e5f7ab97cf3df24a5cd..1f8a7c7fcff86c6764bb59314b7f5146a4e50c7a 100644 --- a/pwrapis/src/procservice.c +++ b/pwrapis/src/procservice.c @@ -163,12 +163,13 @@ static int ModifyServiceState(const PWR_PROC_ServiceState *sState, const char *s static int QueryProcs(const char *keyWords, pid_t procs[], int maxNum, int *procNum) { - char cmd[PWR_MAX_STRING_LEN] = GET_US_PROCS_CMD; + char cmd[PWR_MAX_STRING_LEN + sizeof(QUERY_PROCS_CMD)] = GET_US_PROCS_CMD; if (keyWords && strlen(keyWords) != 0) { if (sprintf(cmd, QUERY_PROCS_CMD, keyWords) < 0) { return PWR_ERR_FILE_SPRINTF_FAILED; } } + Logger(DEBUG, MD_NM_SVR_PROC, "QueryProcs: %s", cmd); FILE *fp = popen(cmd, "r"); if (fp == NULL) { return PWR_ERR_SYS_EXCEPTION;