diff options
| author | Eli Zaretskii | 2014-03-01 13:51:02 +0200 |
|---|---|---|
| committer | Eli Zaretskii | 2014-03-01 13:51:02 +0200 |
| commit | cb8b26b4ba0660043c40093f99df4a5d5f5725fb (patch) | |
| tree | 0d17d9c6ff1ecec46255f47fcebc074ae9db2e2b /src | |
| parent | 504d5d5fadb19242f287f0970f57369580b74b1a (diff) | |
| download | emacs-cb8b26b4ba0660043c40093f99df4a5d5f5725fb.tar.gz emacs-cb8b26b4ba0660043c40093f99df4a5d5f5725fb.zip | |
Fix bug #16751 with crashes in expand-file-name on Windows.
src/fileio.c (Fexpand_file_name) [WINDOWSNT]: Don't treat file names
that start with more than 2 slashes as UNCs.
Diffstat (limited to 'src')
| -rw-r--r-- | src/ChangeLog | 5 | ||||
| -rw-r--r-- | src/fileio.c | 16 |
2 files changed, 14 insertions, 7 deletions
diff --git a/src/ChangeLog b/src/ChangeLog index 704ac68b67e..1f351e71403 100644 --- a/src/ChangeLog +++ b/src/ChangeLog | |||
| @@ -1,3 +1,8 @@ | |||
| 1 | 2014-03-01 Eli Zaretskii <eliz@gnu.org> | ||
| 2 | |||
| 3 | * fileio.c (Fexpand_file_name) [WINDOWSNT]: Don't treat file names | ||
| 4 | that start with more than 2 slashes as UNCs. (Bug#16751) | ||
| 5 | |||
| 1 | 2014-02-28 Paul Eggert <eggert@penguin.cs.ucla.edu> | 6 | 2014-02-28 Paul Eggert <eggert@penguin.cs.ucla.edu> |
| 2 | 7 | ||
| 3 | Fix a few crashes and leaks when cloning C strings. | 8 | Fix a few crashes and leaks when cloning C strings. |
diff --git a/src/fileio.c b/src/fileio.c index d03a2bcf02f..fb0a33b39db 100644 --- a/src/fileio.c +++ b/src/fileio.c | |||
| @@ -1047,10 +1047,9 @@ filesystem tree, not (expand-file-name ".." dirname). */) | |||
| 1047 | nm++; | 1047 | nm++; |
| 1048 | 1048 | ||
| 1049 | /* Discard any previous drive specifier if nm is now in UNC format. */ | 1049 | /* Discard any previous drive specifier if nm is now in UNC format. */ |
| 1050 | if (IS_DIRECTORY_SEP (nm[0]) && IS_DIRECTORY_SEP (nm[1])) | 1050 | if (IS_DIRECTORY_SEP (nm[0]) && IS_DIRECTORY_SEP (nm[1]) |
| 1051 | { | 1051 | && !IS_DIRECTORY_SEP (nm[2])) |
| 1052 | drive = 0; | 1052 | drive = 0; |
| 1053 | } | ||
| 1054 | #endif /* WINDOWSNT */ | 1053 | #endif /* WINDOWSNT */ |
| 1055 | #endif /* DOS_NT */ | 1054 | #endif /* DOS_NT */ |
| 1056 | 1055 | ||
| @@ -1261,7 +1260,8 @@ filesystem tree, not (expand-file-name ".." dirname). */) | |||
| 1261 | && !IS_DIRECTORY_SEP (nm[0]) | 1260 | && !IS_DIRECTORY_SEP (nm[0]) |
| 1262 | #endif | 1261 | #endif |
| 1263 | #ifdef WINDOWSNT | 1262 | #ifdef WINDOWSNT |
| 1264 | && !(IS_DIRECTORY_SEP (nm[0]) && IS_DIRECTORY_SEP (nm[1])) | 1263 | && !(IS_DIRECTORY_SEP (nm[0]) && IS_DIRECTORY_SEP (nm[1]) |
| 1264 | && !IS_DIRECTORY_SEP (nm[2])) | ||
| 1265 | #endif | 1265 | #endif |
| 1266 | && !newdir) | 1266 | && !newdir) |
| 1267 | { | 1267 | { |
| @@ -1286,7 +1286,8 @@ filesystem tree, not (expand-file-name ".." dirname). */) | |||
| 1286 | && IS_DEVICE_SEP (newdir[1]) && IS_DIRECTORY_SEP (newdir[2])) | 1286 | && IS_DEVICE_SEP (newdir[1]) && IS_DIRECTORY_SEP (newdir[2])) |
| 1287 | #ifdef WINDOWSNT | 1287 | #ifdef WINDOWSNT |
| 1288 | /* Detect Windows file names in UNC format. */ | 1288 | /* Detect Windows file names in UNC format. */ |
| 1289 | && ! (IS_DIRECTORY_SEP (newdir[0]) && IS_DIRECTORY_SEP (newdir[1])) | 1289 | && ! (IS_DIRECTORY_SEP (newdir[0]) && IS_DIRECTORY_SEP (newdir[1]) |
| 1290 | && !IS_DIRECTORY_SEP (newdir[2])) | ||
| 1290 | #endif | 1291 | #endif |
| 1291 | ) | 1292 | ) |
| 1292 | { | 1293 | { |
| @@ -1346,7 +1347,8 @@ filesystem tree, not (expand-file-name ".." dirname). */) | |||
| 1346 | if (IS_DIRECTORY_SEP (nm[0]) && collapse_newdir) | 1347 | if (IS_DIRECTORY_SEP (nm[0]) && collapse_newdir) |
| 1347 | { | 1348 | { |
| 1348 | #ifdef WINDOWSNT | 1349 | #ifdef WINDOWSNT |
| 1349 | if (IS_DIRECTORY_SEP (newdir[0]) && IS_DIRECTORY_SEP (newdir[1])) | 1350 | if (IS_DIRECTORY_SEP (newdir[0]) && IS_DIRECTORY_SEP (newdir[1]) |
| 1351 | && !IS_DIRECTORY_SEP (newdir[2])) | ||
| 1350 | { | 1352 | { |
| 1351 | char *adir = strcpy (alloca (strlen (newdir) + 1), newdir); | 1353 | char *adir = strcpy (alloca (strlen (newdir) + 1), newdir); |
| 1352 | char *p = adir + 2; | 1354 | char *p = adir + 2; |