Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 10 May 2025 08:57:14 GMT
From:      Dag-Erling =?utf-8?Q?Sm=C3=B8rgrav?= <des@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org
Subject:   git: be7839151cc9 - main - cp: Fix dead link case.
Message-ID:  <202505100857.54A8vEjq059726@gitrepo.freebsd.org>

next in thread | raw e-mail | index | archive | help
The branch main has been updated by des:

URL: https://cgit.FreeBSD.org/src/commit/?id=be7839151cc9e3dfc428933d5f2705b32cdf4b86

commit be7839151cc9e3dfc428933d5f2705b32cdf4b86
Author:     Dag-Erling Smørgrav <des@FreeBSD.org>
AuthorDate: 2025-05-10 08:55:35 +0000
Commit:     Dag-Erling Smørgrav <des@FreeBSD.org>
CommitDate: 2025-05-10 08:55:35 +0000

    cp: Fix dead link case.
    
    The test case was a) not doing what I intended it to do and b) missing
    a third possible configuration.  Fix the test case, and fix the code
    by not setting the beneath flag (which restricts operations to the
    destination tree) unless we are recursing.
    
    Fixes:          82fc0d09e862
    Sponsored by:   Klara, Inc.
    Reviewed by:    allanjude, markj
    Differential Revision:  https://reviews.freebsd.org/D50257
---
 bin/cp/cp.c             |  2 +-
 bin/cp/tests/cp_test.sh | 11 ++++++++---
 2 files changed, 9 insertions(+), 4 deletions(-)

diff --git a/bin/cp/cp.c b/bin/cp/cp.c
index f1cfde7e5008..a3c8d910639c 100644
--- a/bin/cp/cp.c
+++ b/bin/cp/cp.c
@@ -267,7 +267,7 @@ copy(char *argv[], enum op type, int fts_options, struct stat *root_stat)
 	char *recpath = NULL;
 	int atflags, dne, badcp, len, rval;
 	mode_t mask, mode;
-	bool beneath = type != FILE_TO_FILE;
+	bool beneath = Rflag && type != FILE_TO_FILE;
 	bool skipdp = false;
 
 	/*
diff --git a/bin/cp/tests/cp_test.sh b/bin/cp/tests/cp_test.sh
index 6644588f1ce8..bfc4009580cb 100755
--- a/bin/cp/tests/cp_test.sh
+++ b/bin/cp/tests/cp_test.sh
@@ -479,10 +479,15 @@ to_deadlink_append_body()
 	mkdir bar
 	ln -s baz bar/foo
 	atf_check cp foo bar
-	atf_check cmp -s foo bar/foo
-	rm -f bar/foo
+	atf_check cmp -s foo bar/baz
+	rm -f bar/foo bar/baz
+	ln -s baz bar/foo
+	atf_check cp foo bar/
+	atf_check cmp -s foo bar/baz
+	rm -f bar/foo bar/baz
+	ln -s $PWD/baz bar/foo
 	atf_check cp foo bar/
-	atf_check cmp -s foo bar/foo
+	atf_check cmp -s foo baz
 }
 
 atf_test_case to_dirlink



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202505100857.54A8vEjq059726>