https://bugs.kde.org/show_bug.cgi?id=484002

--- Comment #5 from Mark Wielaard <m...@klomp.org> ---
Comment on attachment 167483
  --> https://bugs.kde.org/attachment.cgi?id=167483
first attempt at a patch

Very nice.

Before the patch:

$ ~/src/valgrind/vg-in-place ./t
==66177== Memcheck, a memory error detector
==66177== Copyright (C) 2002-2022, and GNU GPL'd, by Julian Seward et al.
==66177== Using Valgrind-3.23.0.GIT and LibVEX; rerun with -h for copyright
info
==66177== Command: ./t
==66177== 
0x1ffefff9f0 0x1ffefff9e0
3
0x4a58480 0x1ffefff9e0
3
0x4a584d0 0x1ffefff9e0
==66177== Invalid read of size 32
==66177==    at 0x49D6A2E: __wcpncpy_avx2 (strncpy-avx2.S:85)
==66177==    by 0x4938560: wcsxfrm_l (strxfrm_l.c:679)
==66177==    by 0x4012A1: main (t.c:25)
==66177==  Address 0x4a584d0 is 0 bytes inside a block of size 16 alloc'd
==66177==    at 0x484278B: malloc (vg_replace_malloc.c:446)
==66177==    by 0x401258: main (t.c:22)
==66177== 
3
==66177== 
==66177== HEAP SUMMARY:
==66177==     in use at exit: 0 bytes in 0 blocks
==66177==   total heap usage: 3 allocs, 3 frees, 1,056 bytes allocated
==66177== 
==66177== All heap blocks were freed -- no leaks are possible
==66177== 
==66177== For lists of detected and suppressed errors, rerun with: -s
==66177== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0)

After the patch:

$ ~/src/valgrind/vg-in-place ./t
==67120== Memcheck, a memory error detector
==67120== Copyright (C) 2002-2022, and GNU GPL'd, by Julian Seward et al.
==67120== Using Valgrind-3.23.0.GIT and LibVEX; rerun with -h for copyright
info
==67120== Command: ./t
==67120== 
0x1ffefff9e0 0x1ffefff9d0
3
0x4a58480 0x1ffefff9d0
3
0x4a584d0 0x1ffefff9d0
3
==67120== 
==67120== HEAP SUMMARY:
==67120==     in use at exit: 0 bytes in 0 blocks
==67120==   total heap usage: 3 allocs, 3 frees, 1,056 bytes allocated
==67120== 
==67120== All heap blocks were freed -- no leaks are possible
==67120== 
==67120== For lists of detected and suppressed errors, rerun with: -s
==67120== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)

Implementation looks correct. Two small comments.

+       /* This checks for overlap after copying, unavoidable without */ \
+       /* pre-counting length... should be ok */ \
+       /* +4 because sizeof(wchar_t) == 4 */ \
+       SizeT srclen = ((m < n) ? m+1 : n)*4; \
+       RECORD_COPY(srclen); \

I found the comment a little confusing until I understood that the +4 really
meant *4.

+       RECORD_OVERLAP_ERROR("wcspcpy", dst_orig, src_orig, 0); \
                                                               ^wcpncpy

-- 
You are receiving this mail because:
You are watching all bug changes.

Reply via email to