diff --git a/openmp/runtime/src/kmp_affinity.cpp b/openmp/runtime/src/kmp_affinity.cpp --- a/openmp/runtime/src/kmp_affinity.cpp +++ b/openmp/runtime/src/kmp_affinity.cpp @@ -2176,6 +2176,10 @@ // FIXME - this will match "node_ " unsigned level; if (KMP_SSCANF(buf, "node_%u id", &level) == 1) { + // validate the input fisrt: + if (level > (unsigned)__kmp_xproc) { // level is too big + level = __kmp_xproc; + } if (nodeIdIndex + level >= maxIndex) { maxIndex = nodeIdIndex + level; } @@ -4346,8 +4350,6 @@ depth = __kmp_affinity_create_hwloc_map(&address2os, &msg_id); if (depth == 0) { KMP_EXIT_AFF_NONE; - } else if (depth < 0 && __kmp_affinity_verbose) { - KMP_INFORM(AffIgnoringHwloc, "KMP_AFFINITY"); } } else if (__kmp_affinity_verbose) { KMP_INFORM(AffIgnoringHwloc, "KMP_AFFINITY"); diff --git a/openmp/runtime/src/kmp_runtime.cpp b/openmp/runtime/src/kmp_runtime.cpp --- a/openmp/runtime/src/kmp_runtime.cpp +++ b/openmp/runtime/src/kmp_runtime.cpp @@ -6487,7 +6487,7 @@ file_name = tail; if (tail != NULL) { long *flag_addr = 0; - long flag_val = 0; + unsigned long flag_val = 0; KMP_SSCANF(flag_addr_str, "%p", RCAST(void **, &flag_addr)); KMP_SSCANF(flag_val_str, "%lx", &flag_val); if (flag_addr != 0 && flag_val != 0 && strcmp(file_name, "") != 0) { diff --git a/openmp/runtime/src/kmp_taskdeps.h b/openmp/runtime/src/kmp_taskdeps.h --- a/openmp/runtime/src/kmp_taskdeps.h +++ b/openmp/runtime/src/kmp_taskdeps.h @@ -23,6 +23,7 @@ return; kmp_int32 n = KMP_ATOMIC_DEC(&node->dn.nrefs) - 1; + KMP_DEBUG_ASSERT(n >= 0); if (n == 0) { KMP_ASSERT(node->dn.nrefs == 0); #if USE_FAST_MEMORY