Windows: avoid loop on reparse-point cycles
In Windows 10 Fall Creators Update, a OneDrive mount looks to Racket like a reparse point that refers to itself. Make Racket stop trying to resolve the path further in that case. Relevant to #1671
This commit is contained in:
parent
ae4e85a6a7
commit
22e8af32f3
|
@ -349,6 +349,7 @@ static int UNC_stat(rktio_t *rktio, const char *dirname, int *flags, int *isdir,
|
|||
char *copy;
|
||||
WIN32_FILE_ATTRIBUTE_DATA fad;
|
||||
int len, must_be_dir = 0;
|
||||
int same_path = 0; /* to give up on cyclic links */
|
||||
const wchar_t *wp;
|
||||
|
||||
if (resolved_path)
|
||||
|
@ -420,7 +421,7 @@ static int UNC_stat(rktio_t *rktio, const char *dirname, int *flags, int *isdir,
|
|||
free(copy);
|
||||
return 0;
|
||||
} else {
|
||||
if (GET_FF_ATTRIBS(fad) & FF_A_LINK) {
|
||||
if ((GET_FF_ATTRIBS(fad) & FF_A_LINK) && !same_path) {
|
||||
if (islink) {
|
||||
*islink = 1;
|
||||
return 1;
|
||||
|
@ -465,6 +466,8 @@ static int UNC_stat(rktio_t *rktio, const char *dirname, int *flags, int *isdir,
|
|||
if (resolved_path)
|
||||
*resolved_path = dirname;
|
||||
|
||||
same_path = !strcmp(dirname, copy);
|
||||
|
||||
free(dest);
|
||||
free(copy);
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user