From: Pierre Veyre Date: Fri, 21 Mar 2014 15:23:49 +0000 (+0100) Subject: Fix leaks and invalid read X-Git-Tag: v3_11~200 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/f4535c0579d5c3b32a758e62be8954533d0dda8f Fix leaks and invalid read --- diff --git a/src/surf/storage_interface.hpp b/src/surf/storage_interface.hpp index 7e17d8e183..d70771c2f0 100644 --- a/src/surf/storage_interface.hpp +++ b/src/surf/storage_interface.hpp @@ -182,7 +182,7 @@ public: * * @return The StorageAction corresponding to the opening */ - virtual StorageActionPtr open(char* mount, char* path)=0; + virtual StorageActionPtr open(const char* mount, const char* path)=0; /** * @brief Close a file diff --git a/src/surf/storage_n11.cpp b/src/surf/storage_n11.cpp index 289e657470..cfe41f84ae 100644 --- a/src/surf/storage_n11.cpp +++ b/src/surf/storage_n11.cpp @@ -406,7 +406,7 @@ StorageActionPtr StorageN11::ls(const char* path) return action; } -StorageActionPtr StorageN11::open(char* mount, char* path) +StorageActionPtr StorageN11::open(const char* mount, const char* path) { XBT_DEBUG("\tOpen file '%s'",path); @@ -430,8 +430,6 @@ StorageActionPtr StorageN11::open(char* mount, char* path) StorageActionPtr action = new StorageN11Action(getModel(), 0, getState() != SURF_RESOURCE_ON, this, OPEN); action->p_file = file; - free(path); - free(mount); return action; } diff --git a/src/surf/storage_n11.hpp b/src/surf/storage_n11.hpp index 86139ccc92..93f4f3a636 100644 --- a/src/surf/storage_n11.hpp +++ b/src/surf/storage_n11.hpp @@ -53,7 +53,7 @@ public: lmm_system_t maxminSystem, double bread, double bwrite, double bconnection, const char* type_id, char *content_name, char *content_type, sg_size_t size, char *attach); - StorageActionPtr open(char* mount, char* path); + StorageActionPtr open(const char* mount, const char* path); StorageActionPtr close(surf_file_t fd); StorageActionPtr ls(const char *path); StorageActionPtr read(surf_file_t fd, sg_size_t size);//FIXME:why we have a useless param ptr ?? diff --git a/src/surf/workstation_interface.cpp b/src/surf/workstation_interface.cpp index 09f8af3b69..63c4219802 100644 --- a/src/surf/workstation_interface.cpp +++ b/src/surf/workstation_interface.cpp @@ -216,7 +216,7 @@ ActionPtr Workstation::open(const char* fullpath) { { XBT_DEBUG("See '%s'",mnt.name); file_mount_name = (char *) xbt_malloc ((strlen(mnt.name)+1)); - strncpy(file_mount_name,fullpath,strlen(mnt.name)); + strncpy(file_mount_name,fullpath,strlen(mnt.name)+1); file_mount_name[strlen(mnt.name)] = '\0'; if(!strcmp(file_mount_name,mnt.name) && strlen(mnt.name)>longest_prefix_length) @@ -230,14 +230,18 @@ ActionPtr Workstation::open(const char* fullpath) { { /* Mount point found, split fullpath into mount_name and path+filename*/ path = (char *) xbt_malloc ((strlen(fullpath)-longest_prefix_length+1)); mount_name = (char *) xbt_malloc ((longest_prefix_length+1)); - strncpy(mount_name, fullpath, longest_prefix_length); + strncpy(mount_name, fullpath, longest_prefix_length+1); + strncpy(path, fullpath+longest_prefix_length, strlen(fullpath)-longest_prefix_length+1); path[strlen(fullpath)-longest_prefix_length] = '\0'; mount_name[longest_prefix_length] = '\0'; } else xbt_die("Can't find mount point for '%s' on '%s'", fullpath, getName()); - return st->open(mount_name, path); + ActionPtr action = st->open((const char*)mount_name, (const char*)path); + free((char*)path); + free((char*)mount_name); + return action; } ActionPtr Workstation::close(surf_file_t fd) {