https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96318
Bug ID: 96318 Summary: FAIL: c-c++-common/asan/strncpy-overflow-1.c * output pattern test with C on Darwin Product: gcc Version: 11.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: sanitizer Assignee: unassigned at gcc dot gnu.org Reporter: dominiq at lps dot ens.fr CC: dodji at gcc dot gnu.org, dvyukov at gcc dot gnu.org, iains at gcc dot gnu.org, jakub at gcc dot gnu.org, kcc at gcc dot gnu.org, marxin at gcc dot gnu.org Target Milestone: --- With G++ the output is ================================================================= ==80414==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x6020000000f9 at pc 0x0001101655f0 bp 0x7ffedfdf30c0 sp 0x7ffedfdf2870 WRITE of size 10 at 0x6020000000f9 thread T0 #0 0x1101655ef in wrap_strncpy /opt/gcc/build_w/x86_64-apple-darwin19.5.0/libsanitizer/asan/../../../../work/libsanitizer/asan/asan_interceptors.cpp:483:5 #1 0x10fe09d8d in main /opt/gcc/work/gcc/testsuite/c-c++-common/asan/strncpy-overflow-1.c:11:10 #2 0x7fff6e3decc8 in start (/usr/lib/system/libdyld.dylib:x86_64+0x1acc8) 0x6020000000f9 is located 0 bytes to the right of 9-byte region [0x6020000000f0,0x6020000000f9) allocated by thread T0 here: #0 0x110196d37 in wrap_malloc /opt/gcc/build_w/x86_64-apple-darwin19.5.0/libsanitizer/asan/../../../../work/libsanitizer/sanitizer_common/sanitizer_malloc_mac.inc:140:3 #1 0x10fe09d71 in main /opt/gcc/work/gcc/testsuite/c-c++-common/asan/strncpy-overflow-1.c:10:37 #2 0x7fff6e3decc8 in start (/usr/lib/system/libdyld.dylib:x86_64+0x1acc8) ... which matches /* { dg-output "WRITE of size \[0-9\]* at 0x\[0-9a-f\]+ thread T0\[^\n\r]*(\n|\r\n|\r)" } */ /* { dg-output " #0 0x\[0-9a-f\]+ +(in _*(interceptor_|wrap_|)strncpy|\[(\])\[^\n\r]*(\n|\r\n|\r)" } */ /* { dg-output " #1 0x\[0-9a-f\]+ +(in _*main (\[^\n\r]*strncpy-overflow-1.c:11|\[^\n\r]*:0|\[^\n\r]*\\+0x\[0-9a-z\]*)|\[(\]).*(\n|\r\n|\r)" } */ /* { dg-output "\[^\n\r]*0x\[0-9a-f\]+ is located 0 bytes to the right of 9-byte region\[^\n\r]*(\n|\r\n|\r)" } */ /* { dg-output "\[^\n\r]*allocated by thread T0 here:\[^\n\r]*(\n|\r\n|\r)" } */ /* { dg-output " #0 0x\[0-9a-f\]+ +(in _*(interceptor_|wrap_|)malloc|\[(\])\[^\n\r]*(\n|\r\n|\r)" } */ /* { dg-output " #1 0x\[0-9a-f\]+ +(in _*main (\[^\n\r]*strncpy-overflow-1.c:10|\[^\n\r]*:0|\[^\n\r]*\\+0x\[0-9a-z\]*)|\[(\])\[^\n\r]*(\n|\r\n|\r)" } */ With GCC the output is ================================================================= ==82801==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x6020000000f9 at pc 0x00010df36d79 bp 0x7ffee1cf0670 sp 0x7ffee1cefe20 WRITE of size 5 at 0x6020000000f9 thread T0 #0 0x10df36d78 in wrap___bzero.part.0 /opt/gcc/build_w/x86_64-apple-darwin19.5.0/libsanitizer/asan/../../../../work/libsanitizer/sanitizer_common/sanitizer_common_interceptors.inc:5584:3 #1 0x7fff6e43fc42 in stpncpy (/usr/lib/system/libsystem_c.dylib:x86_64+0x11c42) #2 0x7fff6e4ab34a in __strncpy_chk (/usr/lib/system/libsystem_c.dylib:x86_64+0x7d34a) #3 0x10df0cd8d in main /opt/gcc/work/gcc/testsuite/c-c++-common/asan/strncpy-overflow-1.c:11:3 #4 0x7fff6e3decc8 in start (/usr/lib/system/libdyld.dylib:x86_64+0x1acc8) 0x6020000000f9 is located 0 bytes to the right of 9-byte region [0x6020000000f0,0x6020000000f9) allocated by thread T0 here: #0 0x10df60d37 in wrap_malloc /opt/gcc/build_w/x86_64-apple-darwin19.5.0/libsanitizer/asan/../../../../work/libsanitizer/sanitizer_common/sanitizer_malloc_mac.inc:140:3 #1 0x10df0cd6a in main /opt/gcc/work/gcc/testsuite/c-c++-common/asan/strncpy-overflow-1.c:10:31 #2 0x7fff6e3decc8 in start (/usr/lib/system/libdyld.dylib:x86_64+0x1acc8) ... with two extra lines not expected in the output regexpr. Questions: (1) Why gcc on Darwin outputs these extra lines? (2) Is there some magic incantation to ovoid it? (3) What to do with the test on Darwin?