[Bug 258616] fgrep fails to find string that is present
- Reply: bugzilla-noreply_a_freebsd.org: "[Bug 258616] fgrep fails to find string that is present"
- Reply: bugzilla-noreply_a_freebsd.org: "[Bug 258616] fgrep fails to find string that is present"
- Reply: bugzilla-noreply_a_freebsd.org: "[Bug 258616] fgrep fails to find string that is present"
- Reply: bugzilla-noreply_a_freebsd.org: "[Bug 258616] fgrep fails to find string that is present"
- Reply: bugzilla-noreply_a_freebsd.org: "[Bug 258616] fgrep fails to find string that is present"
- Reply: bugzilla-noreply_a_freebsd.org: "[Bug 258616] fgrep fails to find string that is present"
- Reply: bugzilla-noreply_a_freebsd.org: "[Bug 258616] fgrep fails to find string that is present"
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Mon, 20 Sep 2021 01:13:55 UTC
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=258616 Bug ID: 258616 Summary: fgrep fails to find string that is present Product: Base System Version: 12.2-STABLE Hardware: amd64 OS: Any Status: New Severity: Affects Some People Priority: --- Component: bin Assignee: bugs@FreeBSD.org Reporter: dtucker@dtucker.net Created attachment 228028 --> https://bugs.freebsd.org/bugzilla/attachment.cgi?id=228028&action=edit known_hosts file demonstrating fgrep problem I think I've discovered a case where fgrep fails to find a string that is in fact present in the input file. I have been seeing intermittent test failures in OpenSSH's regress tests on at least FreeBSD 12.2 and NetBSD 9 (which seems to be based on FreeBSD's code). The test fails maybe 1 in 100 times when fgrep fails to match a string (an SSH host key in this case) that is in the input file. It seems to be (a) data-dependent and (b) consistent. I captured one of the failure cases (attached), and if I select the key from the file with awk then fgrep for it, fgrep does not find it: $ uname -a FreeBSD fbsd12 12.2-RELEASE-p3 FreeBSD 12.2-RELEASE-p3 GENERIC amd64 $ fgrep $(awk '$2=="ssh-rsa"{print $3}' known_hosts) known_hosts; echo $? 1 $ grep -F $(awk '$2=="ssh-rsa"{print $3}' known_hosts) known_hosts; echo $? 1 but the equivalent awk will find it: $ a=$(awk '$2=="ssh-rsa"{print $3}' known_hosts) $ awk '$3=="'$a'"' known_hosts localhost-with-alias ssh-rsa [key elided] and if I reduce the size of the file fgrep then also works: $ grep ssh-rsa known_hosts >known_hosts2 $ fgrep $(awk '$2=="ssh-rsa"{print $3}' known_hosts2) known_hosts2; echo $? localhost-with-alias ssh-rsa [key elided] 0 Deleting the first few lines from the file will also make it work. Further weirdness: I built grep from the 12.2 branch it worked as expected: $ ./grep -F $(awk '$2=="ssh-rsa"{print $3}' known_hosts) known_hosts; echo $? localhost-with-alias ssh-rsa [key elided] 0 Same file works as expected on at least Linux and OpenBSD. One of the other developers reproduced this and reduced the size of the test case which I will also attach. -- You are receiving this mail because: You are the assignee for the bug.