1

なぜ「汚染された変数「len」をループ境界として使用する」が存在するのですか? それは「静的」に関連していますか?

527    int i = 0;
528
 CID 90251 (#1 of 1): Untrusted loop bound (TAINTED_SCALAR)
 3. tainted_data: Using tainted variable "len" as a loop boundary.
529    for (i = 0; i < len; i++) {

関数は次のとおりです。

static jintArray getAvailableCoreNums(JNIEnv *env, jobject clazz) {
 int len = getCoreNums(POSSIBLE_CORES);
 int coreNums[len];
 int i = 0;

 for (i = 0; i < len; i++) {
     coreNums[i] = i + 1;
 }

 jintArray args = (*env)->NewIntArray(env, len);
 if (args == NULL){
     LOGE("Can not new Int Array");
     return NULL;
 }

 (*env)->SetIntArrayRegion(env, args, 0, len, coreNums);
 return args;
}

そして getCoreNums() の関数

int getCoreNums(const char *sys)
{
     char rts[RTS_SIZE];
     memset(rts, 0, RTS_SIZE);

     const char * split = "-";
     if (0 == catEntry(sys, rts)) {
         int start, end;
         sscanf(rts, "%d-%d", &start, &end);
         LOGD("get %s core number %d\n", sys, end + 1);
         return end + 1;
     } else {
         LOGD("get %s core number failed\n", sys);
         return 0;
     }
 }

この種の警告を取り除くにはどうすればよいですか?

4

0 に答える 0