if (src[i] != dst[i])
return -1;
- /* Size fail */
- err = memcpy_s (dst + 1, sizeof (dst) - 1, src, sizeof (src));
+ /*
+ * Size test: sizeof (src) > sizeof (dst)
+ * Skip this test when __builtin_constant_p (sizeof (src)) is true.
+ * This is because memcpy_s_inline skips all the errors checking when the
+ * the above buildin function returns true which may cause overrun problem
+ * for dst buffer if this test is executed.
+ */
+ if (__builtin_constant_p (sizeof (src)) == 0)
+ {
+ err = memcpy_s (dst + 1, sizeof (dst) - 1, src, sizeof (src));
- if (err == EOK)
- return -1;
+ if (err == EOK)
+ return -1;
+ }
/* overlap fail */
err = memcpy_s (dst, sizeof (dst), dst + 1, sizeof (dst) - 1);
v_indicator = strncmp (s1, "Every moment is a fresh beginning", s1len);
if (v_indicator != 0)
return -1;
- if (v_indicator != indicator)
- return -1;
/* s1 > s2, 0 is expected since comparison is no more than n character */
indicator = clib_strncmp (s1, "Every moment is a fresh begin",
sizeof ("Every moment is a fresh begin") - 1);
if (v_indicator != 0)
return -1;
- if (v_indicator != indicator)
- return -1;
/* s1 < s2, < 0 is expected */
indicator = clib_strncmp (s1, "Every moment is fresh beginning",
return -1;
/* verify it against strcpy */
- strcpy (dst, src);
+ strcpy (dst, src); //NOSONAR
/* This better not fail but check anyhow */
if (strcmp_s (dst, clib_strnlen (dst, sizeof (dst)), src, &indicator) !=