]> git.ipfire.org Git - thirdparty/coreutils.git/commitdiff
tests: fix false failure with ASAN in rm-readdir-fail
authorPádraig Brady <P@draigBrady.com>
Thu, 24 Nov 2016 01:26:30 +0000 (01:26 +0000)
committerPádraig Brady <P@draigBrady.com>
Thu, 24 Nov 2016 01:31:45 +0000 (01:31 +0000)
* tests/rm/rm-readdir-fail.sh: ASAN correctly indicated
that fts was writing to freed memory.  This was because
we reused a single dirent in our readdir() test wrapper.
Since fts was deallocating those dirents, we now get
a new dirent for each call to our readdir wrapper.

tests/rm/rm-readdir-fail.sh

index 835d3424f8eab41e9413109543f00b4f52fedf0e..91fb0f64906f547410ec6e34026d9f6b3f3df1f4 100755 (executable)
@@ -47,8 +47,8 @@ struct dirent *readdir (DIR *dirp)
       errno = ESRCH;
       return NULL;
     }
-  static struct dirent* d;
-  if (! d && ! ( d = real_readdir (dirp)))
+  struct dirent* d;
+  if (! (d = real_readdir (dirp)))
     {
       fprintf (stderr, "Failed to get dirent\n");
       errno = ENOENT;
@@ -90,8 +90,10 @@ for READDIR_PARTIAL in '' '1'; do
   rm -f preloaded
   (export LD_PRELOAD=$LD_PRELOAD:./k.so
    returns_ 1 rm -Rf dir 2>>err) || fail=1
-  test -f preloaded ||
+  if ! test -f preloaded; then
+    cat err
     skip_ "internal test failure: maybe LD_PRELOAD doesn't work?"
+  fi
 done
 
 # First case is failure to read any items from dir, then assume empty.