From 2e97ec58b93c933c059928b45066f1cd221f36d1 Mon Sep 17 00:00:00 2001 From: Vojtech Bocek Date: Sat, 2 Feb 2013 13:22:42 +0100 Subject: Use only std::string in TWFunc::Get_Folder_Size * Fixes crash which could occur with too deep path because of too much memory allocated on stack --- twrp-functions.cpp | 19 +++++-------------- 1 file changed, 5 insertions(+), 14 deletions(-) (limited to 'twrp-functions.cpp') diff --git a/twrp-functions.cpp b/twrp-functions.cpp index 4a5dec273..f2dcf7c64 100644 --- a/twrp-functions.cpp +++ b/twrp-functions.cpp @@ -203,20 +203,17 @@ int TWFunc::Recursive_Mkdir(string Path) { return true; } -unsigned long long TWFunc::Get_Folder_Size(string Path, bool Display_Error) { +unsigned long long TWFunc::Get_Folder_Size(const string& Path, bool Display_Error) { DIR* d; struct dirent* de; struct stat st; - char path2[4096], filename[4096]; unsigned long long dusize = 0; unsigned long long dutemp = 0; - // Make a copy of path in case the data in the pointer gets overwritten later - strcpy(path2, Path.c_str()); - d = opendir(path2); + d = opendir(Path.c_str()); if (d == NULL) { - LOGE("error opening '%s'\n", path2); + LOGE("error opening '%s'\n", Path.c_str()); LOGE("error: %s\n", strerror(errno)); return 0; } @@ -225,19 +222,13 @@ unsigned long long TWFunc::Get_Folder_Size(string Path, bool Display_Error) { { if (de->d_type == DT_DIR && strcmp(de->d_name, ".") != 0 && strcmp(de->d_name, "..") != 0) { - strcpy(filename, path2); - strcat(filename, "/"); - strcat(filename, de->d_name); - dutemp = Get_Folder_Size(filename, Display_Error); + dutemp = Get_Folder_Size((Path + "/" + de->d_name), Display_Error); dusize += dutemp; dutemp = 0; } else if (de->d_type == DT_REG) { - strcpy(filename, path2); - strcat(filename, "/"); - strcat(filename, de->d_name); - stat(filename, &st); + stat((Path + "/" + de->d_name).c_str(), &st); dusize += (unsigned long long)(st.st_size); } } -- cgit v1.2.3