From 6040b4a27409968c764353a98c45d972cfd89a8a Mon Sep 17 00:00:00 2001 From: jvoisin Date: Thu, 30 Apr 2026 17:37:02 +0200 Subject: Fix a bug in stpncpy The manpage says that stpncpy will "copy non-null bytes from the string pointed to by src into the array pointed to by dst.", it doesn't add a terminal NULL byte, so we shouldn't check for it. --- include/string.h | 2 +- tests/test_stpncpy_static_write.c | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/include/string.h b/include/string.h index 7987d17..23f598c 100644 --- a/include/string.h +++ b/include/string.h @@ -104,7 +104,7 @@ _FORTIFY_FN(stpncpy) char *stpncpy(char * _FORTIFY_POS0 __d, const char *__s, { size_t __b = __bos(__d, 0); - if (__n > __b && strlen(__s) + 1 > __b) + if (__n > __b) __builtin_trap(); return __orig_stpncpy(__d, __s, __n); } diff --git a/tests/test_stpncpy_static_write.c b/tests/test_stpncpy_static_write.c index 4bf9092..d4202ba 100644 --- a/tests/test_stpncpy_static_write.c +++ b/tests/test_stpncpy_static_write.c @@ -4,7 +4,8 @@ int main(int argc, char** argv) { char buffer[8] = {0}; - stpncpy(buffer, "1234567", 5); + stpncpy(buffer, "1234567890", 5); + stpncpy(buffer, "1234567890", 8); puts(buffer); CHK_FAIL_START -- cgit v1.3