Reproduced under UBSAN with `tail -f <&-` giving:
tail.c:2220:18: runtime error: load of value 190,
which is not a valid value for type ‘_Bool'
* src/tail.c (tail_file): Ensure f->ignore is initialized
in all cases where we can't tail the specified file.
* tests/tail-2/follow-stdin.sh: Add a test case which
checks stderr has no UBSAN warnings.
Fixes http://bugs.gnu.org/25041
ok = false;
f->errnum = -1;
f->tailable = false;
- f->ignore = ! (reopen_inaccessible_files
- && follow_mode == Follow_name);
error (0, 0, _("%s: cannot follow end of this type of file%s"),
quotef (pretty_name (f)),
f->ignore ? _("; giving up on this name") : "");
if (!ok)
{
+ f->ignore = ! (reopen_inaccessible_files
+ && follow_mode == Follow_name);
close_fd (fd, pretty_name (f));
f->fd = -1;
}
cleanup_
done
+
+# Before coreutils-8.26 this would induce an UMR under UBSAN
+returns_ 1 timeout 10 tail -f - <&- 2>err || fail=1
+cat <<\EOF >exp || framework_failure_
+tail: cannot fstat 'standard input': Bad file descriptor
+tail: error reading 'standard input': Bad file descriptor
+tail: no files remaining
+tail: -: Bad file descriptor
+EOF
+compare exp err || fail=1
+
+
Exit $fail