test_wcsncat_safe.c (965B)
1 #include "common.h" 2 3 #include <wchar.h> 4 5 int main(int argc, char** argv) { 6 wchar_t buffer[8] = {0}; 7 8 /* Safe: empty buffer, append 7 wide chars → exactly fills buffer */ 9 wcsncat(buffer, L"ABCDEFG", 7); 10 printf("%ls\n", buffer); 11 12 /* Safe: reset, append with n larger than source. 13 * src is L"AB" (len 2), n=100 → only 2 wchars copied */ 14 buffer[0] = L'\0'; 15 wcsncat(buffer, L"AB", 100); 16 printf("%ls\n", buffer); 17 18 /* Safe: partially filled, append fits exactly. 19 * buffer = L"ABCD" (4 wchars), append L"EFG" n=3 → 4+3+1 = 8 = exact fit */ 20 buffer[0] = L'\0'; 21 wcsncat(buffer, L"ABCD", 4); 22 wcsncat(buffer, L"EFG", 3); 23 printf("%ls\n", buffer); 24 25 /* Safe: n limits copy to fit. 26 * buffer = L"ABCDE" (5 wchars), src long, n=2 → 5+2+1 = 8 = exact fit */ 27 buffer[0] = L'\0'; 28 wcsncat(buffer, L"ABCDE", 5); 29 wcsncat(buffer, L"FGHIJKLM", 2); 30 printf("%ls\n", buffer); 31 32 /* All safe operations passed without trapping */ 33 return 0; 34 }