From b1dbe77c5b99c7bf6f1ebfe89cf957113fd18940 Mon Sep 17 00:00:00 2001 From: Pavel Roskin Date: Thu, 15 Aug 2002 22:30:05 +0000 Subject: [PATCH] * vfs.c (mc_def_getlocalcopy): Preserve existing extension. --- vfs/ChangeLog | 2 ++ vfs/vfs.c | 15 ++++++++++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/vfs/ChangeLog b/vfs/ChangeLog index 004527d06..e442b408f 100644 --- a/vfs/ChangeLog +++ b/vfs/ChangeLog @@ -1,5 +1,7 @@ 2002-08-15 Pavel Roskin + * vfs.c (mc_def_getlocalcopy): Preserve existing extension. + * direntry.c (vfs_s_getlocalcopy): Fix potentially dangerous strcpy(). diff --git a/vfs/vfs.c b/vfs/vfs.c index 4a43580c2..d312f5a88 100644 --- a/vfs/vfs.c +++ b/vfs/vfs.c @@ -1090,12 +1090,25 @@ mc_def_getlocalcopy (vfs *vfs, char *filename) int fdin, fdout, i; char buffer[8192]; struct stat mystat; + char *ext = NULL; + char *ptr; fdin = mc_open (filename, O_RDONLY); if (fdin == -1) return NULL; - fdout = mc_mkstemps (&tmp, "mclocalcopy", NULL); + /* Try to preserve existing extension */ + for (ptr = filename + strlen(filename) - 1; ptr >= filename; ptr--) { + if (*ptr == '.') { + ext = ptr; + break; + } + + if (!isalnum((unsigned char) *ptr)) + break; + } + + fdout = mc_mkstemps (&tmp, "mclocalcopy", ext); if (fdout == -1) goto fail; while ((i = mc_read (fdin, buffer, sizeof (buffer))) > 0){