From 5128d299a5eab93348a5ef2ffff0e38d599289bc Mon Sep 17 00:00:00 2001 From: Ethan Yonker Date: Sat, 4 Feb 2017 19:52:56 -0600 Subject: Fix crash during check for TWRP app Make sure that opendir succeeds before continuing. Change-Id: I3c96002ab830f4df2041044d411a7bac42a5b8f4 --- gui/action.cpp | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/gui/action.cpp b/gui/action.cpp index 9c8af35f4..3899f5047 100644 --- a/gui/action.cpp +++ b/gui/action.cpp @@ -1910,21 +1910,21 @@ int GUIAction::checkforapp(std::string arg __unused) } } if (PartitionManager.Mount_By_Path("/data", false)) { - string parent_path = "/data/app"; - DIR *d = opendir("/data/app"); - struct dirent *p; - size_t len = strlen("me.twrp.twrpapp-"); - while ((p = readdir(d))) { - if (!strcmp(p->d_name, ".") || !strcmp(p->d_name, "..")) - continue; - if (p->d_type == DT_DIR && strlen(p->d_name) >= len && strncmp(p->d_name, "me.twrp.twrpapp-", len) == 0) { - LOGINFO("App found at %s/%s\n", parent_path.c_str(), p->d_name); + const char parent_path[] = "/data/app"; + const char app_prefix[] = "me.twrp.twrpapp-"; + DIR *d = opendir(parent_path); + if (d) { + struct dirent *p; + while ((p = readdir(d))) { + if (p->d_type != DT_DIR || strlen(p->d_name) < strlen(app_prefix) || strncmp(p->d_name, app_prefix, strlen(app_prefix))) + continue; closedir(d); + LOGINFO("App found at '%s/%s'\n", parent_path, p->d_name); DataManager::SetValue("tw_app_install_status", 2); // 0 = no status, 1 = not installed, 2 = already installed goto exit; } + closedir(d); } - closedir(d); } } else simulate_progress_bar(); -- cgit v1.2.3