diff options
Diffstat (limited to 'src/string/strncat.c')
-rw-r--r-- | src/string/strncat.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/src/string/strncat.c b/src/string/strncat.c index 563f055f..0d7dd9e7 100644 --- a/src/string/strncat.c +++ b/src/string/strncat.c @@ -11,9 +11,15 @@ char * strncat(char * restrict s1, const char * restrict s2, size_t n) SIGNAL_SAFE(0); ASSERT_NONNULL(s1); ASSERT_NONNULL(s2); - ASSERT_NOOVERLAP(s1, n, s2, strlen(s1) + strlen(s2)); + DANGEROUS_READ(s1, n); + size_t s1len = strlen(s1); + DANGER_OVER(); + DANGEROUS_READ(s2, n); + size_t s2len = strlen(s2); + ASSERT_NOOVERLAP(s1, n, s2, s1len + s2len); + DANGEROUS_WRITE(s1, n); - append = s1 + strlen(s1); + append = s1 + s1len; for (i = 0; i < n; i++) { append[i] = s2[i]; @@ -26,6 +32,8 @@ char * strncat(char * restrict s1, const char * restrict s2, size_t n) append[i] = '\0'; } + DANGER_OVER(); + return s1; } |