summaryrefslogtreecommitdiff
path: root/src/string/strcat.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/string/strcat.c')
-rw-r--r--src/string/strcat.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/src/string/strcat.c b/src/string/strcat.c
index afbdf84c..60e7695d 100644
--- a/src/string/strcat.c
+++ b/src/string/strcat.c
@@ -8,7 +8,13 @@ char * strcat(char * restrict s1, const char * restrict s2)
SIGNAL_SAFE(0);
ASSERT_NONNULL(s1);
ASSERT_NONNULL(s2);
- ASSERT_NOOVERLAP(s1, strlen(s1) + strlen(s2), s2, strlen(s2));
+ DANGEROUS_READ(s2, -1);
+ size_t s2len = strlen(s2);
+ DANGER_OVER();
+ DANGEROUS_READ(s1, -1);
+ size_t s1len = strlen(s1);
+ ASSERT_NOOVERLAP(s1, s1len + s2len, s2, s2len);
+ DANGEROUS_WRITE(s1, s1len + s2len);
/*
RETURN_ALWAYS(ARGUMENT(s1));
@@ -18,6 +24,9 @@ char * strcat(char * restrict s1, const char * restrict s2)
}
strcpy(s1 + i, s2);
+
+ DANGER_OVER();
+
return s1;
}