From c87486f5951f0b6445730d03e388b1f6f68ef7b8 Mon Sep 17 00:00:00 2001 From: Joshua Peraza Date: Fri, 4 Oct 2019 12:13:16 -0700 Subject: [PATCH] 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 Reviewed-by: Mark Mentovai --- client/crashpad_client_linux.cc | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/client/crashpad_client_linux.cc b/client/crashpad_client_linux.cc index 74f15403..00a83fa0 100644 --- a/client/crashpad_client_linux.cc +++ b/client/crashpad_client_linux.cc @@ -58,24 +58,31 @@ std::vector BuildAppProcessArgs( const std::map& annotations, const std::vector& arguments, int socket) { - std::vector 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 argv; + argv.push_back(kAppProcess); argv.push_back("/system/bin"); argv.push_back("--application"); argv.push_back(class_name); - std::vector handler_argv = BuildHandlerArgvStrings( - base::FilePath(), database, metrics_dir, url, annotations, arguments); + std::vector 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; }