Mercurial > emacs
changeset 103756:41dca7756517
* fileio.c (Fsubstitute_in_file_name, Ffile_name_directory)
(Fexpand_file_name): Copy string data properly (Bug#3772).
author | Chong Yidong <cyd@stupidchicken.com> |
---|---|
date | Tue, 07 Jul 2009 22:52:58 +0000 |
parents | a1a6e341fa6e |
children | 86825d2eb18c |
files | src/ChangeLog src/fileio.c |
diffstat | 2 files changed, 14 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- a/src/ChangeLog Tue Jul 07 20:10:05 2009 +0000 +++ b/src/ChangeLog Tue Jul 07 22:52:58 2009 +0000 @@ -1,3 +1,8 @@ +2009-07-07 Chong Yidong <cyd@stupidchicken.com> + + * fileio.c (Fsubstitute_in_file_name, Ffile_name_directory) + (Fexpand_file_name): Copy string data properly (Bug#3772). + 2009-07-07 Jan Djärv <jan.h.d@swipnet.se> * xterm.c (handle_one_xevent): Only call x_check_fullscreen on the
--- a/src/fileio.c Tue Jul 07 20:10:05 2009 +0000 +++ b/src/fileio.c Tue Jul 07 22:52:58 2009 +0000 @@ -422,9 +422,11 @@ return call2 (handler, Qfile_name_directory, filename); filename = FILE_SYSTEM_CASE (filename); +#ifdef DOS_NT + beg = (unsigned char *) alloca (SBYTES (filename) + 1); + bcopy (SDATA (filename), beg, SBYTES (filename) + 1); +#else beg = SDATA (filename); -#ifdef DOS_NT - beg = strcpy (alloca (strlen (beg) + 1), beg); #endif p = beg + SBYTES (filename); @@ -939,10 +941,9 @@ } } - nm = SDATA (name); - /* Make a local copy of nm[] to protect it from GC in DECODE_FILE below. */ - nm = strcpy (alloca (strlen (nm) + 1), nm); + nm = (unsigned char *) alloca (SBYTES (name) + 1); + bcopy (SDATA (name), nm, SBYTES (name) + 1); #ifdef DOS_NT /* Note if special escape prefix is present, but remove for now. */ @@ -1641,11 +1642,12 @@ if (!NILP (handler)) return call2 (handler, Qsubstitute_in_file_name, filename); - nm = SDATA (filename); /* Always work on a copy of the string, in case GC happens during decode of environment variables, causing the original Lisp_String data to be relocated. */ - nm = strcpy (alloca (strlen (nm) + 1), nm); + nm = (unsigned char *) alloca (SBYTES (filename) + 1); + bcopy (SDATA (filename), nm, SBYTES (filename) + 1); + #ifdef DOS_NT CORRECT_DIR_SEPS (nm); substituted = (strcmp (nm, SDATA (filename)) != 0);