android: insert app_process at start of handler argv
HandlerMain() consumes argv[0] as the name for itself. Arguments
before the class name are consumed by app_process when using a Java
handler. Re-insert app_process for HandlerMain() to consume as the
program name or else it will consume the next real argument.
Bug: chromium:1011145
Change-Id: Id7090db36cc382a9fdba49b9259dbbce3a9bcc5c
Reviewed-on: https://chromium-review.googlesource.com/c/crashpad/crashpad/+/1841974
Commit-Queue: Joshua Peraza <jperaza@chromium.org>
Reviewed-by: Mark Mentovai <mark@chromium.org>
diff --git a/client/crashpad_client_linux.cc b/client/crashpad_client_linux.cc
index 74f1540..00a83fa 100644
--- a/client/crashpad_client_linux.cc
+++ b/client/crashpad_client_linux.cc
@@ -58,24 +58,31 @@
const std::map<std::string, std::string>& annotations,
const std::vector<std::string>& arguments,
int socket) {
- std::vector<std::string> argv;
#if defined(ARCH_CPU_64_BITS)
- argv.push_back("/system/bin/app_process64");
+ static constexpr char kAppProcess[] = "/system/bin/app_process64";
#else
- argv.push_back("/system/bin/app_process32");
+ static constexpr char kAppProcess[] = "/system/bin/app_process32";
#endif
+
+ std::vector<std::string> argv;
+ argv.push_back(kAppProcess);
argv.push_back("/system/bin");
argv.push_back("--application");
argv.push_back(class_name);
- std::vector<std::string> handler_argv = BuildHandlerArgvStrings(
- base::FilePath(), database, metrics_dir, url, annotations, arguments);
+ std::vector<std::string> handler_argv =
+ BuildHandlerArgvStrings(base::FilePath(kAppProcess),
+ database,
+ metrics_dir,
+ url,
+ annotations,
+ arguments);
if (socket != kInvalidFileHandle) {
handler_argv.push_back(FormatArgumentInt("initial-client-fd", socket));
}
- argv.insert(argv.end(), handler_argv.begin() + 1, handler_argv.end());
+ argv.insert(argv.end(), handler_argv.begin(), handler_argv.end());
return argv;
}