From e03c988748d860527248d4aca01bb7903d3799aa Mon Sep 17 00:00:00 2001 From: Josh Gao Date: Fri, 11 Dec 2015 15:49:12 -0800 Subject: [PATCH] adb: handle some edge cases with process environments. Change-Id: I0c20e58e14ef756a8c45dd5ea85f7301157a3c8e --- adb/shell_service.cpp | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/adb/shell_service.cpp b/adb/shell_service.cpp index 0f893788b..366ed074a 100644 --- a/adb/shell_service.cpp +++ b/adb/shell_service.cpp @@ -250,13 +250,18 @@ bool Subprocess::ForkAndExec() { // Construct the environment for the child before we fork. passwd* pw = getpwuid(getuid()); std::unordered_map env; + if (environ) { + char** current = environ; + while (char* env_cstr = *current++) { + std::string env_string = env_cstr; + char* delimiter = strchr(env_string.c_str(), '='); - char** current = environ; - while (char* env_cstr = *current++) { - std::string env_string = env_cstr; - char* delimiter = strchr(env_string.c_str(), '='); - *delimiter++ = '\0'; - env[env_string.c_str()] = delimiter; + // Drop any values that don't contain '='. + if (delimiter) { + *delimiter++ = '\0'; + env[env_string.c_str()] = delimiter; + } + } } if (pw != nullptr) {