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

--- Comment #6 from Mark Wielaard <[email protected]> ---
Looks good, thanks.
Small tweak to the new testcase and code for some corner cases

diff --git a/coregrind/m_syswrap/syswrap-generic.c
b/coregrind/m_syswrap/syswrap-generic.c
index e7c9c40e5..175a89199 100644
--- a/coregrind/m_syswrap/syswrap-generic.c
+++ b/coregrind/m_syswrap/syswrap-generic.c
@@ -1675,7 +1675,8 @@ Bool ML_(fd_allowed)(Int fd, const HChar *syscallname,
ThreadId tid,
       client is exactly what we don't want.  */

    /* croak? */
-   if (!isNewFd && (VG_(strcmp)("close", syscallname) != 0)) {
+   if (VG_(clo_track_fds) && allowed
+       && !isNewFd && (VG_(strcmp)("close", syscallname) != 0)) {
      const OpenFd *openbadfd = ML_(find_OpenFd)(fd);
      if (!openbadfd) {
        /* File descriptor which was never created (or inherited).  */
diff --git a/none/tests/use_after_close.c b/none/tests/use_after_close.c
index 888a76a60..deb4e6888 100644
--- a/none/tests/use_after_close.c
+++ b/none/tests/use_after_close.c
@@ -8,11 +8,24 @@ int main(void)
    char *string = "bad\n";
    int fd = dup(2);

-   write(fd, string, 3);
+   /* OK. */
+   write(fd, string, 4);
    close(fd);

-   write(fd, string, 3);
-   write(7, string, 3);
+   /* Already closed. */
+   write(fd, string, 4);
+
+   /* Never created. */
+   write(7, string, 4);
+
+   /* Invalid. */
+   write(-7, string, 4);
+
+   /* Double double close. */
+   close(fd);
+
+   /* Invalid close. */
+   close (-7);

    return 0;
 }
diff --git a/none/tests/use_after_close.stderr.exp
b/none/tests/use_after_close.stderr.exp
index d3c6fa456..1ef31c655 100644
--- a/none/tests/use_after_close.stderr.exp
+++ b/none/tests/use_after_close.stderr.exp
@@ -1,4 +1,5 @@
-badFile descriptor 3 was closed already
+bad
+File descriptor 3 was closed already
  Previously closed
    at 0x........: close (in /...libc...)
    by 0x........: main
@@ -10,3 +11,18 @@ badFile descriptor 3 was closed already
 File descriptor 7 was never created
    at 0x........: write (in /...libc...)
    by 0x........: main
+File descriptor -7 Invalid file descriptor
+   at 0x........: write (in /...libc...)
+   by 0x........: main
+File descriptor ...: ... is already closed
+   at 0x........: close (in /...libc...)
+   by 0x........: main
+ Previously closed
+   at 0x........: close (in /...libc...)
+   by 0x........: main
+ Originally opened
+   at 0x........: dup (in /...libc...)
+   by 0x........: main
+File descriptor -7 Invalid file descriptor
+   at 0x........: close (in /...libc...)
+   by 0x........: main

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

Reply via email to