From f5e005e8f3ccc9dac62a2bc34b83c904ea5e1298 Mon Sep 17 00:00:00 2001 From: Steven Watanabe Date: Tue, 1 Mar 2016 11:32:34 -0700 Subject: [PATCH] Fix memory leak on cygwin and vms. path_copy initializes a new string. It should never be used on a string that is already initialized. --- src/engine/pathnt.c | 3 ++- src/engine/pathvms.c | 18 ++++++++++++++---- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/src/engine/pathnt.c b/src/engine/pathnt.c index fcffe24df..bde5cd0b8 100644 --- a/src/engine/pathnt.c +++ b/src/engine/pathnt.c @@ -345,7 +345,8 @@ static int translate_path_cyg2win( string * path ) if ( result ) { - string_copy( path, result ); + string_truncate( path, 0 ); + string_append( path, result ); translated = 1; } diff --git a/src/engine/pathvms.c b/src/engine/pathvms.c index 01f3f90d9..5882d40af 100644 --- a/src/engine/pathvms.c +++ b/src/engine/pathvms.c @@ -174,15 +174,25 @@ static int translate_path_posix2vms( string * path ) && stat(as_file->value, &statbuf ) > 0 && ( statbuf.st_mode & S_IFREG ) ) { - string_copy( path, as_file->value ); + string_truncate( path, 0 ); + string_append( path, as_file->value ); } else { - string_copy( path, as_dir->value ); + string_truncate( path, 0 ); + string_append( path, as_dir->value ); } } - else if ( file_count ) { string_copy( path, as_file->value ); } - else if ( dir_count ) { string_copy( path, as_dir->value ); } + else if ( file_count ) + { + string_truncate( path, 0 ); + string_append( path, as_file->value ); + } + else if ( dir_count ) + { + string_truncate( path, 0 ); + string_append( path, as_dir->value ); + } else { /* error: unable to translate path to native format */