From: Alexandra Hájková Date: Thu, 23 May 2024 08:46:26 +0000 (-0400) Subject: Improve none/tests/double_close_range test and filter_fdleak X-Git-Tag: VALGRIND_3_24_0~116 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8b374fd2bce60a58809b4f95a93d7e2f01929a08;p=thirdparty%2Fvalgrind.git Improve none/tests/double_close_range test and filter_fdleak Adjust none/tests/file_dclose, none/tests/fdleak_ipv4 and socket_close to fit the changes in filter_fdleak. https://bugs.kde.org/show_bug.cgi?id=488441 --- diff --git a/none/tests/double_close_range.c b/none/tests/double_close_range.c index 623959330..5c593fd11 100644 --- a/none/tests/double_close_range.c +++ b/none/tests/double_close_range.c @@ -9,6 +9,8 @@ int main () { + // Create a new file descriptor that we immediately close. + // This is of course fine. int fd = dup (2); if (fd != -1){ fprintf(stderr, "close fd %d\n", fd); @@ -16,11 +18,18 @@ int main () } // Shouldn't warn, we are closing everything + // This is a special case for close_range if the last + // argument is ~0U (infinity). fprintf(stderr, "Closing range (%d, %d).\n", fd, ~0U); - close_range(6, ~0U, 0); + close_range(fd, ~0U, 0); - // Should warn, we close a small range (but only for fd itself - fprintf(stderr, "Closing range (%d, %d).\n", fd, 7); + int fd5 = dup2(1, 5); + int fd7 = dup2(2, 7); + fprintf(stderr, "Closing range (%d, %d).\n", fd5, fd7); + close_range(5, 7, 0); + + // Should warn, we close a small range + fprintf(stderr, "Double closing range (%d, %d).\n", fd5, fd7); close_range(5, 7, 0); return 0; diff --git a/none/tests/double_close_range.stderr.exp b/none/tests/double_close_range.stderr.exp index f1b78ea1d..eeb599bf2 100644 --- a/none/tests/double_close_range.stderr.exp +++ b/none/tests/double_close_range.stderr.exp @@ -1,3 +1,22 @@ close fd 3 Closing range (3, -1). -Closing range (3, 7). +Closing range (5, 7). +Double closing range (5, 7). +File descriptor ...: ... is already closed + at 0x........: close_range (in /...libc...) + by 0x........: main + Previously closed + at 0x........: close_range (in /...libc...) + by 0x........: main + Originally opened + at 0x........: dup2 (in /...libc...) + by 0x........: main +File descriptor ...: ... is already closed + at 0x........: close_range (in /...libc...) + by 0x........: main + Previously closed + at 0x........: close_range (in /...libc...) + by 0x........: main + Originally opened + at 0x........: dup2 (in /...libc...) + by 0x........: main diff --git a/none/tests/double_close_range.vgtest b/none/tests/double_close_range.vgtest index 8320d03f9..e47ee50d1 100644 --- a/none/tests/double_close_range.vgtest +++ b/none/tests/double_close_range.vgtest @@ -1,3 +1,4 @@ prog: double_close_range prereq: test -x double_close_range +stderr_filter: filter_fdleak vgopts: -q --track-fds=yes diff --git a/none/tests/fdleak_ipv4.stderr.exp b/none/tests/fdleak_ipv4.stderr.exp index 9612ef72a..801b0279f 100644 --- a/none/tests/fdleak_ipv4.stderr.exp +++ b/none/tests/fdleak_ipv4.stderr.exp @@ -1,5 +1,5 @@ -File descriptor 4: AF_INET socket 4: 127.0.0.1:... <-> 127.0.0.1:... is already closed +File descriptor ...: ... is already closed at 0x........: close (in /...libc...) by 0x........: client (fdleak_ipv4.c:70) by 0x........: main diff --git a/none/tests/file_dclose.stderr.exp b/none/tests/file_dclose.stderr.exp index 26721e6f5..c2c8c80ed 100644 --- a/none/tests/file_dclose.stderr.exp +++ b/none/tests/file_dclose.stderr.exp @@ -1,6 +1,6 @@ close 3 time passes and we close 3 again -File descriptor 3: file_dclose.tmp is already closed +File descriptor ...: ... is already closed at 0x........: close (in /...libc...) by 0x........: closefile (file_dclose.c:17) by 0x........: main diff --git a/none/tests/filter_fdleak b/none/tests/filter_fdleak index f7cb026ed..d26937bcc 100755 --- a/none/tests/filter_fdleak +++ b/none/tests/filter_fdleak @@ -13,6 +13,7 @@ perl -p -e 's/^Open (AF_UNIX socket|file descriptor) [0-9]*: \/devices\/pseudo\/ perl -p -e 's/^Open (AF_UNIX socket|file descriptor) [0-9]*: (\/private)?\/tmp\/(sock|data1|data2|file)\.[0-9]*/Open $1 ...: \/tmp\/$3/' | perl -p -e 's/^Open file descriptor [0-9]*: .*/Open file descriptor ...: .../' | perl -p -e 's/^Open file descriptor [0-9]*:$/Open file descriptor ...:/' | +perl -p -e 's/File descriptor [0-9]*: .* is already closed/File descriptor ...: ... is already closed/' | perl -p -e 's/127.0.0.1:[0-9]*/127.0.0.1:.../g' | perl -p -e 's/socket\.c:[1-9][0-9]*/in \/...libc.../' | # arm systems substitute open for creat @@ -42,7 +43,9 @@ perl -p -0 -e 's/(Open[^\n]*\n)( (at|by)[^\n]*\n)+/$1 ...\n/gs' | sed "s/by 0x........: (below main)/by 0x........: main/" | sed "s/by 0x........: main (.*)/by 0x........: main/" | -# With glibc debuginfo installed we might see syscall-template.S, close.c or creat64.c +# With glibc debuginfo installed we might see syscall-template.S, +# dup2.c close.c or creat64.c perl -p -e "s/\(syscall-template.S:[0-9]*\)/(in \/...libc...)/" | perl -p -e "s/\(close.c:[0-9]*\)/(in \/...libc...)/" | -perl -p -e "s/\(creat(?:64)?.c:[0-9]*\)/(in \/...libc...)/" +perl -p -e "s/\(creat(?:64)?.c:[0-9]*\)/(in \/...libc...)/" | +perl -p -e "s/\(dup2.c:[0-9]*\)/(in \/...libc...)/" diff --git a/none/tests/socket_close.stderr.exp b/none/tests/socket_close.stderr.exp index 5352390dd..e7435e8aa 100644 --- a/none/tests/socket_close.stderr.exp +++ b/none/tests/socket_close.stderr.exp @@ -1,7 +1,7 @@ Open socket 3 close socket_fd 3 and close the socket again 3 -File descriptor 3: AF_UNIX socket 3: /tmp/vgtest-foofrob is already closed +File descriptor ...: ... is already closed at 0x........: close (in /...libc...) by 0x........: main Previously closed