diff --git a/openmp/runtime/src/kmp_safe_c_api.h b/openmp/runtime/src/kmp_safe_c_api.h --- a/openmp/runtime/src/kmp_safe_c_api.h +++ b/openmp/runtime/src/kmp_safe_c_api.h @@ -30,6 +30,7 @@ #define KMP_SSCANF sscanf_s #define KMP_STRCPY_S strcpy_s #define KMP_STRNCPY_S strncpy_s +#define KMP_STRNCAT_S strncat_s // Use this only when buffer size is unknown #define KMP_MEMCPY(dst, src, cnt) memcpy_s(dst, cnt, src, cnt) @@ -61,6 +62,7 @@ #define KMP_SSCANF sscanf #define KMP_STRCPY_S(dst, bsz, src) strcpy(dst, src) #define KMP_STRNCPY_S(dst, bsz, src, cnt) strncpy(dst, src, cnt) +#define KMP_STRNCAT_S(dst, bsz, src, cnt) strncat(dst, src, cnt) #define KMP_VSNPRINTF vsnprintf #define KMP_STRNCPY strncpy #define KMP_STRLEN strlen diff --git a/openmp/runtime/src/kmp_str.cpp b/openmp/runtime/src/kmp_str.cpp --- a/openmp/runtime/src/kmp_str.cpp +++ b/openmp/runtime/src/kmp_str.cpp @@ -137,8 +137,8 @@ KMP_DEBUG_ASSERT(len >= 0); __kmp_str_buf_reserve(buffer, buffer->used + len + 1); - KMP_MEMCPY(buffer->str + buffer->used, str, len); - buffer->str[buffer->used + len] = 0; + buffer->str[buffer->used] = '\0'; + KMP_STRNCAT_S(buffer->str + buffer->used, len + 1, str, len); __kmp_type_convert(buffer->used + len, &(buffer->used)); KMP_STR_BUF_INVARIANT(buffer); } // __kmp_str_buf_cat @@ -151,8 +151,8 @@ if (!src->str || !src->used) return; __kmp_str_buf_reserve(dest, dest->used + src->used + 1); - KMP_MEMCPY(dest->str + dest->used, src->str, src->used); - dest->str[dest->used + src->used] = 0; + dest->str[dest->used] = '\0'; + KMP_STRNCAT_S(dest->str + dest->used, src->used + 1, src->str, src->used); dest->used += src->used; KMP_STR_BUF_INVARIANT(dest); } // __kmp_str_buf_catbuf