[Bug 252614] /usr/bin/diff : BUG: Incorrectly displaying files as duplicates (includes fix)
bugzilla-noreply at freebsd.org
bugzilla-noreply at freebsd.org
Tue Jan 12 16:53:27 UTC 2021
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=252614
Bug ID: 252614
Summary: /usr/bin/diff : BUG: Incorrectly displaying files as
duplicates (includes fix)
Product: Base System
Version: CURRENT
Hardware: Any
OS: Any
Status: New
Severity: Affects Some People
Priority: ---
Component: bin
Assignee: bugs at FreeBSD.org
Reporter: jamie at catflap.org
Created attachment 221499
--> https://bugs.freebsd.org/bugzilla/attachment.cgi?id=221499&action=edit
patch to fix diff bug
When diff hits certain access errors, function diffreg() shows the error
message, and then returns to the calling function, which calls print_status()
with the return value.
However, in these cases, the return value isn't changed from the initial
default value of D_SAME.
Normally, print_status() with a value of D_SAME does nothing, so this works out
ok, however, if the "-s" flag is set, a message is displayed showing
identicality:
case D_SAME:
if (sflag)
printf("Files %s%s and %s%s are identical\n",
path1, entry, path2, entry);
break;
This then produces such results as:
% diff -s /COPYRIGHT /var/run/rpcbind.sock
diff: /var/run/rpcbind.sock: Operation not supported
Files /COPYRIGHT and /var/run/rpcbind.sock are identical
% diff -s /COPYRIGHT /etc/master.passwd
diff: /etc/master.passwd: Permission denied
Files /COPYRIGHT and /etc/master.passwd are identical
A quick fix would be to alter the above line:
if (sflag)
to
if (sflag && status & 2)
A less hacky fix is attached as a patch. It creates a D_ERROR status which is
returned in such cases, and print_status() then deals with that status
seperately from D_SAME.
--
You are receiving this mail because:
You are the assignee for the bug.
More information about the freebsd-bugs
mailing list