shithub: openh264

Download patch

ref: 3c40261256f6e89bd868f9fafba8b9c4fd9ea15d
parent: 0d7bafcebcfde8e1536791e9d387fa11fe6f43d4
parent: e0da5a1686026e6c41695d1e13918acba8fe5cc7
author: Ethan Hugg <ethanhugg@gmail.com>
date: Tue Jan 28 04:42:56 EST 2014

Merge pull request #251 from mstorsjo/crt-string-cleanup

Clean up the rest of the usage of crt_safe_util_x

--- a/codec/common/crt_util_safe_x.cpp
+++ b/codec/common/crt_util_safe_x.cpp
@@ -48,9 +48,6 @@
 #include <sys/timeb.h>
 #ifndef _MSC_VER
 #include <sys/time.h>
-#ifndef HAVE_STRNLEN
-#define strnlen(a,b) strlen(a)
-#endif //!HAVE_STRNLEN
 #endif //!_MSC_VER
 #else
 #include <sys/time.h>
@@ -77,16 +74,12 @@
   return iRc;
 }
 
-str_t* WelsStrncpy (str_t* pDest, int32_t iSizeInBytes, const str_t* kpSrc, int32_t iCount) {
-  strncpy_s (pDest, iSizeInBytes, kpSrc, iCount);
+str_t* WelsStrncpy (str_t* pDest, int32_t iSizeInBytes, const str_t* kpSrc) {
+  strncpy_s (pDest, iSizeInBytes, kpSrc, _TRUNCATE);
 
   return pDest;
 }
 
-int32_t WelsStrnlen (const str_t* kpStr,  int32_t iMaxlen) {
-  return strnlen_s (kpStr, iMaxlen);
-}
-
 int32_t WelsVsnprintf (str_t* pBuffer, int32_t iSizeOfBuffer, const str_t* kpFormat, va_list pArgPtr) {
   return vsnprintf_s (pBuffer, iSizeOfBuffer, _TRUNCATE, kpFormat, pArgPtr);
 }
@@ -137,16 +130,13 @@
   return iRc;
 }
 
-str_t* WelsStrncpy (str_t* pDest, int32_t iSizeInBytes, const str_t* kpSrc, int32_t iCount) {
-  strncpy (pDest, kpSrc, iCount); //confirmed_safe_unsafe_usage
+str_t* WelsStrncpy (str_t* pDest, int32_t iSizeInBytes, const str_t* kpSrc) {
+  strncpy (pDest, kpSrc, iSizeInBytes); //confirmed_safe_unsafe_usage
+  pDest[iSizeInBytes - 1] = '\0';
 
   return pDest;
 }
 
-int32_t WelsStrnlen (const str_t* kpStr,  int32_t iMaxlen) {
-  return strlen (kpStr); //confirmed_safe_unsafe_usage
-}
-
 int32_t WelsVsnprintf (str_t* pBuffer, int32_t iSizeOfBuffer, const str_t* kpFormat, va_list pArgPtr) {
   int32_t iRc = vsnprintf (pBuffer, iSizeOfBuffer, kpFormat, pArgPtr); //confirmed_safe_unsafe_usage
   if (iRc < 0)
@@ -198,30 +188,12 @@
   return iRc;
 }
 
-str_t* WelsStrncpy (str_t* pDest, int32_t iSizeInBytes, const str_t* kpSrc, int32_t iCount) {
-  return strncpy (pDest, kpSrc, iCount); //confirmed_safe_unsafe_usage
+str_t* WelsStrncpy (str_t* pDest, int32_t iSizeInBytes, const str_t* kpSrc) {
+  strncpy (pDest, kpSrc, iSizeInBytes); //confirmed_safe_unsafe_usage
+  pDest[iSizeInBytes - 1] = '\0';
+  return pDest;
 }
 
-#if !defined(MACOS) && !defined(UNIX) && !defined(APPLE_IOS)
-int32_t WelsStrnlen (const str_t* kpStr,  int32_t iMaxlen) {
-  return strnlen (kpStr, iMaxlen); //confirmed_safe_unsafe_usage
-}
-#else
-int32_t WelsStrnlen (const str_t* kpString, int32_t iMaxlen) {
-  // In mac os, there is no strnlen in string.h, we can only use strlen instead of strnlen or
-  // implement strnlen by ourself
-
-#if 1
-  return strlen (kpString); //confirmed_safe_unsafe_usage
-#else
-  const str_t* kpSrc;
-  for (kpSrc = kpString; iMaxlen-- && *kpSrc != '\0'; ++kpSrc)
-    return kpSrc - kpString;
-#endif
-
-}
-#endif
-
 int32_t WelsVsnprintf (str_t* pBuffer, int32_t iSizeOfBuffer, const str_t* kpFormat, va_list pArgPtr) {
   return vsnprintf (pBuffer, iSizeOfBuffer, kpFormat, pArgPtr); //confirmed_safe_unsafe_usage
 }
@@ -261,6 +233,11 @@
 
 #endif
 
+
+str_t* WelsStrcat (str_t* pDest, int32_t iSizeInBytes, const str_t* kpSrc) {
+    int32_t iCurLen = strlen(pDest);
+    return WelsStrncpy(pDest + iCurLen, iSizeInBytes - iCurLen, kpSrc);
+}
 
 int32_t WelsFwrite (const void_t* kpBuffer, int32_t iSize, int32_t iCount, WelsFileHandle* pFp) {
   return fwrite (kpBuffer, iSize, iCount, pFp);
--- a/codec/common/crt_util_safe_x.h
+++ b/codec/common/crt_util_safe_x.h
@@ -76,9 +76,8 @@
 #endif
 
 int32_t   WelsSnprintf (str_t* buffer,  int32_t sizeOfBuffer,  const str_t* format, ...);
-str_t*   WelsStrncpy (str_t* dest, int32_t sizeInBytes, const str_t* src, int32_t count);
-str_t*   WelsStrcat (str_t* dest, int32_t sizeInBytes, str_t* src);
-int32_t   WelsStrnlen (const str_t* str,  int32_t maxlen);
+str_t*   WelsStrncpy (str_t* dest, int32_t sizeInBytes, const str_t* src);
+str_t*   WelsStrcat (str_t* dest, int32_t sizeInBytes, const str_t* src);
 int32_t   WelsVsnprintf (str_t* buffer, int32_t sizeOfBuffer, const str_t* format, va_list argptr);
 
 WelsFileHandle*        WelsFopen (const str_t* filename,  const str_t* mode);
@@ -96,345 +95,5 @@
 #ifdef __cplusplus
 }
 #endif
-
-
-/*
- * Safe Lib specific errno codes.  These can be added to the errno.h file
- * if desired.
- */
-#define ESNULLP         ( 400 )       /* null ptr                    */
-#define ESZEROL         ( 401 )       /* length is zero              */
-#define ESLEMIN         ( 402 )       /* length is below min         */
-#define ESLEMAX         ( 403 )       /* length exceeds max          */
-#define ESOVRLP         ( 404 )       /* overlap undefined           */
-#define ESEMPTY         ( 405 )       /* empty string                */
-#define ESNOSPC         ( 406 )       /* not enough space for s2     */
-#define ESUNTERM        ( 407 )       /* unterminated string         */
-#define ESNODIFF        ( 408 )       /* no difference               */
-#define ESNOTFND        ( 409 )       /* not found                   */
-
-/* EOK may or may not be defined in errno.h */
-#ifndef EOK
-#define EOK   0
-#endif
-
-#if (defined(WIN32) && defined(_MSC_VER) && (_MSC_VER<1500)) || defined(__GNUC__)
-
-static inline int wels_strncpy_s (char* dest, int dmax, const char* src, int slen) {
-int orig_dmax;
-char* orig_dest;
-const char* overlap_bumper;
-
-if (dest == NULL) {
-//        invoke_safe_lib_constraint_handler("strncpy_s: dest is null",
-//                   NULL, ESNULLP);
-  return (ESNULLP);
-}
-
-if (dmax <= 0) {
-//        invoke_safe_lib_constraint_handler("strncpy_s: dmax is 0",
-//                   NULL, ESZEROL);
-  return (ESZEROL);
-}
-
-//    if (dmax > RSIZE_MAX_STR) {
-//        invoke_safe_lib_constraint_handler("strncpy_s: dmax exceeds max",
-//                   NULL, ESLEMAX);
-//        return (ESLEMAX);
-//    }
-
-if (src == NULL) {
-//        handle_error(orig_dest, orig_dmax, "strncpy_s: src is null", ESNULLP);
-  return (ESNULLP);
-}
-
-if (slen <= 0) {
-//        handle_error(orig_dest, orig_dmax, "strncpy_s: slen is zero", ESZEROL);
-  return (ESZEROL);
-}
-
-//    if (slen > RSIZE_MAX_STR) {
-//        handle_error(orig_dest, orig_dmax, "strncpy_s: slen exceeds max", ESLEMAX);
-//        return (ESLEMAX);
-//    }
-
-/* hold base in case src was not copied */
-orig_dmax = dmax;
-orig_dest = dest;
-
-if (dest < src) {
-  overlap_bumper = src;
-
-  while (dmax > 0) {
-    if (dest == overlap_bumper) {
-//                handle_error(orig_dest, orig_dmax, "strncpy_s: overlapping objects", ESOVRLP);
-      return (ESOVRLP);
-    }
-
-    if (slen == 0) {
-      /*
-       * Copying truncated to slen chars.  Note that the TR says to
-       * copy slen chars plus the null char.  We null the slack.
-       */
-#ifdef SAFE_LIB_STR_NULL_SLACK
-      while (dmax) {
-        *dest = '\0';
-        dmax--;
-        dest++;
-      }
-#else
-      *dest = '\0';
-#endif
-      return (EOK);
-    }
-
-    *dest = *src;
-    if (*dest == '\0') {
-#ifdef SAFE_LIB_STR_NULL_SLACK
-      /* null slack */
-      while (dmax) {
-        *dest = '\0';
-        dmax--;
-        dest++;
-      }
-#endif
-      return (EOK);
-    }
-
-    dmax--;
-    slen--;
-    dest++;
-    src++;
-  }
-
-} else {
-  overlap_bumper = dest;
-
-  while (dmax > 0) {
-    if (src == overlap_bumper) {
-//                handle_error(orig_dest, orig_dmax, "strncpy_s: overlapping objects", ESOVRLP);
-      return (ESOVRLP);
-    }
-
-    if (slen == 0) {
-      /*
-       * Copying truncated to slen chars.  Note that the TR says to
-       * copy slen chars plus the null char.  We null the slack.
-       */
-#ifdef SAFE_LIB_STR_NULL_SLACK
-      while (dmax) {
-        *dest = '\0';
-        dmax--;
-        dest++;
-      }
-#else
-      *dest = '\0';
-#endif
-      return (EOK);
-    }
-
-    *dest = *src;
-    if (*dest == '\0') {
-#ifdef SAFE_LIB_STR_NULL_SLACK
-      /* null slack */
-      while (dmax) {
-        *dest = '\0';
-        dmax--;
-        dest++;
-      }
-#endif
-      return (EOK);
-    }
-
-    dmax--;
-    slen--;
-    dest++;
-    src++;
-  }
-}
-
-/*
- * the entire src was not copied, so zero the string
- */
-//    handle_error(orig_dest, orig_dmax, "strncpy_s: not enough space for src", ESNOSPC);
-return (ESNOSPC);
-}
-
-static inline int wels_strcat_s (char* dest, int dmax, const char* src) {
-  int orig_dmax;
-  char* orig_dest;
-  const char* overlap_bumper;
-
-  if (dest == NULL) {
-//        invoke_safe_lib_constraint_handler("strcat_s: dest is null",
-//                   NULL, ESNULLP);
-    return (ESNULLP);
-  }
-
-  if (src == NULL) {
-//        invoke_safe_lib_constraint_handler("strcat_s: src is null",
-//                   NULL, ESNULLP);
-    return (ESNULLP);
-  }
-
-  if (dmax <= 0) {
-//        invoke_safe_lib_constraint_handler("strcat_s: dmax is 0",
-//                   NULL, ESZEROL);
-    return (ESZEROL);
-  }
-
-//    if (dmax > RSIZE_MAX_STR) {
-//        invoke_safe_lib_constraint_handler("strcat_s: dmax exceeds max",
-//                   NULL, ESLEMAX);
-//        return (ESLEMAX);
-//    }
-
-  /* hold base of dest in case src was not copied */
-  orig_dmax = dmax;
-  orig_dest = dest;
-
-  if (dest < src) {
-    overlap_bumper = src;
-
-    /* Find the end of dest */
-    while (*dest != '\0') {
-
-      if (dest == overlap_bumper) {
-//                handle_error(orig_dest, orig_dmax, "strcat_s: overlapping objects", ESOVRLP);
-        return (ESOVRLP);
-      }
-
-      dest++;
-      dmax--;
-      if (dmax == 0) {
-//                handle_error(orig_dest, orig_dmax, "strcat_s: dest unterminated", ESUNTERM);
-        return (ESUNTERM);
-      }
-    }
-
-    while (dmax > 0) {
-      if (dest == overlap_bumper) {
-//                handle_error(orig_dest, orig_dmax, "strcat_s: overlapping objects", ESOVRLP);
-        return (ESOVRLP);
-      }
-
-      *dest = *src;
-      if (*dest == '\0') {
-#ifdef SAFE_LIB_STR_NULL_SLACK
-        /* null slack to clear any data */
-        while (dmax) {
-          *dest = '\0';
-          dmax--;
-          dest++;
-        }
-#endif
-        return (EOK);
-      }
-
-      dmax--;
-      dest++;
-      src++;
-    }
-
-  } else {
-    overlap_bumper = dest;
-
-    /* Find the end of dest */
-    while (*dest != '\0') {
-
-      /*
-       * NOTE: no need to check for overlap here since src comes first
-       * in memory and we're not incrementing src here.
-       */
-      dest++;
-      dmax--;
-      if (dmax == 0) {
-//                handle_error(orig_dest, orig_dmax, "strcat_s: dest unterminated", ESUNTERM);
-        return (ESUNTERM);
-      }
-    }
-
-    while (dmax > 0) {
-      if (src == overlap_bumper) {
-//                handle_error(orig_dest, orig_dmax, "strcat_s: overlapping objects", ESOVRLP);
-        return (ESOVRLP);
-      }
-
-      *dest = *src;
-      if (*dest == '\0') {
-#ifdef SAFE_LIB_STR_NULL_SLACK
-        /* null slack to clear any data */
-        while (dmax) {
-          *dest = '\0';
-          dmax--;
-          dest++;
-        }
-#endif
-        return (EOK);
-      }
-
-      dmax--;
-      dest++;
-      src++;
-    }
-  }
-
-  /*
-   * the entire src was not copied, so null the string
-   */
-//    handle_error(orig_dest, orig_dmax, "strcat_s: not enough space for src", ESNOSPC);
-
-  return (ESNOSPC);
-}
-
-static inline int wels_strnlen_s (const char* dest, int dmax) {
-  int count;
-
-  if (dest == NULL) {
-    return (0);
-  }
-
-  if (dmax <= 0) {
-//        invoke_safe_lib_constraint_handler("strnlen_s: dmax is 0",
-//                   NULL, ESZEROL);
-    return (0);
-  }
-
-//    if (dmax > RSIZE_MAX_STR) {
-//        invoke_safe_lib_constraint_handler("strnlen_s: dmax exceeds max",
-//                   NULL, ESLEMAX);
-//        return (0);
-//    }
-
-  count = 0;
-  while (*dest && dmax) {
-    count++;
-    dmax--;
-    dest++;
-  }
-
-  return (count);
-}
-
-#endif//(WIN32 && _MSC_VER && _MSC_VER<1500) || __GNUC__
-
-#if defined(WIN32) && defined(_MSC_VER)
-#if _MSC_VER >= 1500	// VS2008
-#define STRNCPY		strncpy_s
-#define STRCAT		strcat_s
-#define STRNLEN		strnlen_s
-#else	// mainly for VC6
-#define STRNCPY		wels_strncpy_s	// override s.t.r.n.c.p.y here for safe
-#define STRCAT		wels_strcat_s	// override s.t.r.c.a.t here for safe
-#define STRNLEN		wels_strnlen_s	// override s.t.r.n.l.e.n here for safe
-#endif//_MSC_VER >= 1500
-
-#else//__GNUC__
-
-#define STRNCPY		wels_strncpy_s	// override s.t.r.n.c.p.y here for safe
-#define STRCAT		wels_strcat_s	// override s.t.r.c.a.t here for safe
-#define STRNLEN		wels_strnlen_s	// override s.t.r.n.l.e.n here for safe
-
-#endif//WIN32
 
 #endif//WELS_CRT_UTIL_SAFE_CROSS_PLATFORMS_H__
--- a/codec/decoder/plus/src/welsCodecTrace.cpp
+++ b/codec/decoder/plus/src/welsCodecTrace.cpp
@@ -60,9 +60,9 @@
 int32_t  CWelsTraceBase::Trace (const int kLevel, const str_t* kpFormat, va_list pVl) {
   if (kLevel & m_iLevel) {
     str_t chBuf[MAX_LOG_SIZE] = {0};
-    const int32_t kLen	= WelsStrnlen ((const str_t*)"[DECODER]: ", MAX_LOG_SIZE);
+    const int32_t kLen	= strlen ("[DECODER]: ");
 
-    WelsStrncpy (chBuf, MAX_LOG_SIZE, (const str_t*)"[DECODER]: ", kLen);
+    WelsStrncpy (chBuf, MAX_LOG_SIZE, (const str_t*)"[DECODER]: ");
 
     WelsVsnprintf ((chBuf + kLen),  MAX_LOG_SIZE - kLen, (const str_t*)kpFormat, pVl);
 
@@ -87,8 +87,8 @@
   int  iRC = 0;
   const static str_t chEnter[16] = "\n";
   if (m_pTraceFile) {
-    iRC += WelsFwrite (pStr, 1, WelsStrnlen (pStr, MAX_LOG_SIZE), m_pTraceFile);
-    iRC += WelsFwrite (chEnter, 1, WelsStrnlen (chEnter,  16), m_pTraceFile);
+    iRC += WelsFwrite (pStr, 1, strlen (pStr), m_pTraceFile);
+    iRC += WelsFwrite (chEnter, 1, strlen (chEnter), m_pTraceFile);
     WelsFflush (m_pTraceFile);
   }
   return iRC;
@@ -100,7 +100,7 @@
 int32_t CWelsTraceWinDgb::WriteString (int32_t iLevel, const str_t* pStr) {
   OutputDebugStringA (pStr);
 
-  return WelsStrnlen (pStr, MAX_LOG_SIZE); //strnlen(pStr, MAX_LOG_SIZE);
+  return strlen (pStr);
 }
 
 #endif
--- a/codec/encoder/core/src/encoder.cpp
+++ b/codec/encoder/core/src/encoder.cpp
@@ -323,7 +323,7 @@
     return;
 
   if (bDependencyRecFlag[kiDid]) {
-    if (STRNLEN (kpFileName, MAX_FNAME_LEN) > 0)	// confirmed_safe_unsafe_usage
+    if (strlen (kpFileName) > 0)	// confirmed_safe_unsafe_usage
       pDumpRecFile = WelsFopen (kpFileName, "ab");
     else {
       str_t sDependencyRecFileName[16] = {0};
@@ -333,7 +333,7 @@
     if (NULL != pDumpRecFile)
       WelsFseek (pDumpRecFile, 0, SEEK_END);
   } else {
-    if (STRNLEN (kpFileName, MAX_FNAME_LEN) > 0) {	// confirmed_safe_unsafe_usage
+    if (strlen (kpFileName) > 0) {	// confirmed_safe_unsafe_usage
       pDumpRecFile	= WelsFopen (kpFileName, "wb");
     } else {
       str_t sDependencyRecFileName[16] = {0};
@@ -391,7 +391,7 @@
     return;
 
   if (bRecFlag) {
-    if (STRNLEN (kpFileName, MAX_FNAME_LEN) > 0) {	// confirmed_safe_unsafe_usage
+    if (strlen (kpFileName) > 0) {	// confirmed_safe_unsafe_usage
       pDumpRecFile	= WelsFopen (kpFileName, "ab");
     } else {
       pDumpRecFile	= WelsFopen ("rec.yuv", "ab");
@@ -399,7 +399,7 @@
     if (NULL != pDumpRecFile)
       WelsFseek (pDumpRecFile, 0, SEEK_END);
   } else {
-    if (STRNLEN (kpFileName, MAX_FNAME_LEN) > 0) {	// confirmed_safe_unsafe_usage
+    if (strlen (kpFileName) > 0) {	// confirmed_safe_unsafe_usage
       pDumpRecFile	= WelsFopen (kpFileName, "wb");
     } else {
       pDumpRecFile	= WelsFopen ("rec.yuv", "wb");
--- a/codec/encoder/core/src/property.cpp
+++ b/codec/encoder/core/src/property.cpp
@@ -64,12 +64,11 @@
   if (NULL == pBuf)
     return 0;
 
-  iLen = STRNLEN (WELS_CODE_NAME, 4);	// confirmed_safe_unsafe_usage
+  iLen = strlen (WELS_CODE_NAME);	// confirmed_safe_unsafe_usage
   if (iSize <= iLen)
     return 0;
 
-  pBuf[iLen]	= '\0';
-  STRNCPY (pBuf, iSize, WELS_CODE_NAME, iLen);	// confirmed_safe_unsafe_usage
+  WelsStrncpy (pBuf, iSize, WELS_CODE_NAME);	// confirmed_safe_unsafe_usage
 
   return iLen;
 }
@@ -86,12 +85,11 @@
   if (NULL == pBuf)
     return 0;
 
-  iLen	= STRNLEN (WELS_LIB_NAME, 7);	// confirmed_safe_unsafe_usage
+  iLen	= strlen (WELS_LIB_NAME);	// confirmed_safe_unsafe_usage
   if (iSize <= iLen)
     return 0;
 
-  pBuf[iLen]	= '\0';
-  STRNCPY (pBuf, iSize, WELS_LIB_NAME, iLen);	// confirmed_safe_unsafe_usage
+  WelsStrncpy (pBuf, iSize, WELS_LIB_NAME);	// confirmed_safe_unsafe_usage
 
   return iLen;
 }
@@ -108,12 +106,11 @@
   if (NULL == pBuf)
     return 0;
 
-  iLen	= STRNLEN (WELS_VERSION_STR, 5);	// confirmed_safe_unsafe_usage
+  iLen	= strlen (WELS_VERSION_STR);	// confirmed_safe_unsafe_usage
   if (iSize <= iLen)
     return 0;
 
-  pBuf[iLen]	= '\0';
-  STRNCPY (pBuf, iSize, WELS_VERSION_STR, iLen);	// confirmed_safe_unsafe_usage
+  WelsStrncpy (pBuf, iSize, WELS_VERSION_STR);	// confirmed_safe_unsafe_usage
 
   return iLen;
 }
@@ -130,12 +127,11 @@
   if (NULL == pBuf)
     return 0;
 
-  iLen	= STRNLEN (WELS_IDENT, 30);	// confirmed_safe_unsafe_usage
+  iLen	= strlen (WELS_IDENT);	// confirmed_safe_unsafe_usage
   if (iSize <= iLen)
     return 0;
 
-  pBuf[iLen]	= '\0';
-  STRNCPY (pBuf, iSize, WELS_IDENT, iLen);	// confirmed_safe_unsafe_usage
+  WelsStrncpy (pBuf, iSize, WELS_IDENT);	// confirmed_safe_unsafe_usage
 
   return iLen;
 }
--- a/codec/encoder/core/src/utils.cpp
+++ b/codec/encoder/core/src/utils.cpp
@@ -207,14 +207,12 @@
       int32_t i_shift = 0;
       str_t* pStr = NULL;
       pStr	= GetLogTag (kiLevel, &i_shift);
-      if (NULL != pCtx) {
-        int32_t iLenTag = STRNLEN (pStr, 8);	// confirmed_safe_unsafe_usage
-        STRCAT (&pBuf[iBufUsed], iBufLeft, pStr);	// confirmed_safe_unsafe_usage
-        iBufUsed += iLenTag;
-        pBuf[iBufUsed] = ' ';
-        iBufUsed++;
-        ++iLenTag;
-        iBufLeft -= iLenTag;
+      if (NULL != pStr) {
+        iCurUsed = WelsSnprintf (&pBuf[iBufUsed], iBufLeft, "%s ", pStr);
+        if (iCurUsed >= 0) {
+          iBufUsed += iCurUsed;
+          iBufLeft -= iCurUsed;
+        }
       }
     }
     if (iBufLeft > 0) {
@@ -264,15 +262,11 @@
 #ifdef ENABLE_TRACE_FILE
   sWelsEncCtx* pEncCtx	= (sWelsEncCtx*)pCtx;
   if (wlog == WelsLogDefault) {
-    int32_t len = 0;
     if (pEncCtx->pFileLog != NULL) {
       WelsFclose (pEncCtx->pFileLog);
       pEncCtx->pFileLog = NULL;
     }
     pEncCtx->uiSizeLog	= 0;
-    len = STRNLEN (pCurPath, MAX_FNAME_LEN - 1);	// confirmed_safe_unsafe_usage
-    if (len >= MAX_FNAME_LEN)
-      return;
     pEncCtx->pFileLog	= WelsFopen ("wels_encoder_trace.txt", "wt+");	// confirmed_safe_unsafe_usage
   }
 #endif//ENABLE_TRACE_FILE
--- a/codec/encoder/plus/src/welsCodecTrace.cpp
+++ b/codec/encoder/plus/src/welsCodecTrace.cpp
@@ -120,10 +120,10 @@
   }
 
   str_t pBuf[MAX_LOG_SIZE] = {0};
-  const int32_t len	= STRNLEN ("[ENCODER]: ", MAX_LOG_SIZE);	// confirmed_safe_unsafe_usage
+  const int32_t len	= strlen ("[ENCODER]: ");	// confirmed_safe_unsafe_usage
 
 
-  STRNCPY (pBuf, MAX_LOG_SIZE, "[ENCODER]: ", len);	// confirmed_safe_unsafe_usage
+  WelsStrncpy (pBuf, MAX_LOG_SIZE, "[ENCODER]: ");	// confirmed_safe_unsafe_usage
   WelsVsnprintf (pBuf + len, MAX_LOG_SIZE - len, Str_Format, vl);	// confirmed_safe_unsafe_usage
 
 //		g_WelsCodecTrace.TraceString(iLevel, pBuf);
--- a/codec/encoder/plus/src/welsEncoderExt.cpp
+++ b/codec/encoder/plus/src/welsEncoderExt.cpp
@@ -994,20 +994,20 @@
   str_t strFileName[256] = {0};
   const int32_t iDataLength = m_iMaxPicWidth * m_iMaxPicHeight;
 
-  STRNCPY (strFileName, 256, "pic_in_", STRNLEN ("pic_in_", 255));	// confirmed_safe_unsafe_usage
+  WelsStrncpy (strFileName, 256, "pic_in_");	// confirmed_safe_unsafe_usage
 
   if (m_iMaxPicWidth == 640) {
-    STRCAT (strFileName, 256, "360p.");	// confirmed_safe_unsafe_usage
+    WelsStrcat (strFileName, 256, "360p.");	// confirmed_safe_unsafe_usage
   } else if (m_iMaxPicWidth == 320) {
-    STRCAT (strFileName, 256, "180p.");	// confirmed_safe_unsafe_usage
+    WelsStrcat (strFileName, 256, "180p.");	// confirmed_safe_unsafe_usage
   } else if (m_iMaxPicWidth == 160) {
-    STRCAT (strFileName, 256, "90p.");	// confirmed_safe_unsafe_usage
+    WelsStrcat (strFileName, 256, "90p.");	// confirmed_safe_unsafe_usage
   }
 
   switch (m_iCspInternal) {
   case videoFormatI420:
   case videoFormatYV12:
-    STRCAT (strFileName, 256, "yuv");	// confirmed_safe_unsafe_usage
+    WelsStrcat (strFileName, 256, "yuv");	// confirmed_safe_unsafe_usage
     pFile = WelsFopen (strFileName, "ab+");
     //				WelsLog( m_pEncContext, WELS_LOG_INFO, "WELS_CSP_I420, m_iCspInternal= 0x%x\n", m_iCspInternal);
     if (NULL != pFile) {
@@ -1017,7 +1017,7 @@
     }
     break;
   case videoFormatRGB:
-    STRCAT (strFileName, 256, "rgb");	// confirmed_safe_unsafe_usage
+    WelsStrcat (strFileName, 256, "rgb");	// confirmed_safe_unsafe_usage
     pFile = WelsFopen (strFileName, "ab+");
     if (NULL != pFile) {
       fwrite (pSrc, sizeof (uint8_t), iDataLength * 3, pFile);
@@ -1025,7 +1025,7 @@
       fclose (pFile);
     }
   case videoFormatBGR:
-    STRCAT (strFileName, 256, "bgr");	// confirmed_safe_unsafe_usage
+    WelsStrcat (strFileName, 256, "bgr");	// confirmed_safe_unsafe_usage
     pFile = WelsFopen (strFileName, "ab+");
     //				WelsLog( m_pEncContext, WELS_LOG_INFO, "WELS_CSP_BGR, m_iCspInternal= 0x%x\n", m_iCspInternal);
     if (NULL != pFile) {
@@ -1035,7 +1035,7 @@
     }
     break;
   case videoFormatYUY2:
-    STRCAT (strFileName, 256, "yuy2");	// confirmed_safe_unsafe_usage
+    WelsStrcat (strFileName, 256, "yuy2");	// confirmed_safe_unsafe_usage
     pFile = WelsFopen (strFileName, "ab+");
     if (NULL != pFile) {
       fwrite (pSrc, sizeof (uint8_t), (CALC_BI_STRIDE (m_iMaxPicWidth,  16)) * m_iMaxPicHeight, pFile);