mirror of
https://https.git.savannah.gnu.org/git/coreutils.git
synced 2026-01-26 15:29:07 +00:00
ln: with -sr, don't segfault for a TARGET of ''
Prior to this change, "ln -sr '' F" would segfault, attempting to read path2[1] in relpath.c's path_common_prefix function. This problem arises whenever canonicalize_filename_mode returns NULL. * src/ln.c (convert_abs_rel): Call relpath only when both canonicalize_filename_mode calls return non-NULL. * tests/ln/relative.sh: Add a test to trigger this failure. * THANKS.in: List reporter's name/address. * NEWS (Bug fixes): Mention it. Reported by Erik Bernstein in 739752@bugs.debian.org. Fixes http://bugs.gnu.org/17010.
This commit is contained in:
parent
4f211822dd
commit
0093ac8d57
3
NEWS
3
NEWS
@ -25,6 +25,9 @@ GNU coreutils NEWS -*- outline -*-
|
||||
it would display an error, requiring --no-dereference to avoid the issue.
|
||||
[bug introduced in coreutils-5.3.0]
|
||||
|
||||
ln -sr '' F no longer segfaults. Now works as expected.
|
||||
[bug introduced with the --relative feature in coreutils-8.16]
|
||||
|
||||
shuf --repeat no longer dumps core if the input is empty.
|
||||
[bug introduced with the --repeat feature in coreutils-8.22]
|
||||
|
||||
|
||||
@ -193,6 +193,7 @@ Eric G. Miller egm2@jps.net
|
||||
Eric Pemente pemente@northpark.edu
|
||||
Eric S. Raymond esr@snark.thyrsus.com
|
||||
Erik Bennett bennett@cvo.oneworld.com
|
||||
Erik Bernstein erik@fscking.org
|
||||
Erik Corry erik@kroete2.freinet.de
|
||||
Felix Lee flee@teleport.com
|
||||
Felix Rauch Valenti frauch@cse.unsw.edu.au
|
||||
|
||||
16
src/ln.c
16
src/ln.c
@ -149,13 +149,17 @@ convert_abs_rel (const char *from, const char *target)
|
||||
char *realdest = canonicalize_filename_mode (targetdir, CAN_MISSING);
|
||||
char *realfrom = canonicalize_filename_mode (from, CAN_MISSING);
|
||||
|
||||
/* Write to a PATH_MAX buffer. */
|
||||
char *relative_from = xmalloc (PATH_MAX);
|
||||
|
||||
if (!relpath (realfrom, realdest, relative_from, PATH_MAX))
|
||||
char *relative_from = NULL;
|
||||
if (realdest && realfrom)
|
||||
{
|
||||
free (relative_from);
|
||||
relative_from = NULL;
|
||||
/* Write to a PATH_MAX buffer. */
|
||||
relative_from = xmalloc (PATH_MAX);
|
||||
|
||||
if (!relpath (realfrom, realdest, relative_from, PATH_MAX))
|
||||
{
|
||||
free (relative_from);
|
||||
relative_from = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
free (targetdir);
|
||||
|
||||
@ -45,4 +45,9 @@ mkdir web
|
||||
ln -sr latest web/latest
|
||||
test $(readlink web/latest) = '../release2' || fail=1
|
||||
|
||||
# Expect this to fail with exit status 1, or to succeed quietly (freebsd).
|
||||
# Prior to coreutils-8.23, it would segfault.
|
||||
ln -sr '' F
|
||||
case $? in [01]) ;; *) fail=1;; esac
|
||||
|
||||
Exit $fail
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user