From 2624224581328bd9258af5cefc903fe84cc06dff Mon Sep 17 00:00:00 2001 From: Woongsuk Cho Date: Tue, 23 Apr 2019 10:38:10 +0900 Subject: [PATCH] To prevent appid from getting truncated to cmdline in standalone mode, add padding --- NativeLauncher/dotnet.launcher | 1 + NativeLauncher/launcher/main.cc | 19 +++++++++++++------ 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/NativeLauncher/dotnet.launcher b/NativeLauncher/dotnet.launcher index 7a96952..7d0a365 100644 --- a/NativeLauncher/dotnet.launcher +++ b/NativeLauncher/dotnet.launcher @@ -2,5 +2,6 @@ NAME dotnet-launcher EXE /usr/bin/dotnet-launcher APP_TYPE dotnet +EXTRA_ARG --PADDING_TO_CHANGE_CMDLINE_ EXTRA_ARG --standalone diff --git a/NativeLauncher/launcher/main.cc b/NativeLauncher/launcher/main.cc index 17f69ab..c614cb1 100644 --- a/NativeLauncher/launcher/main.cc +++ b/NativeLauncher/launcher/main.cc @@ -28,9 +28,12 @@ #include #include -#define CMD_LINE_SIZE 24 // sizeof("/usr/bin/dotnet-launcher") +// By the specification, application id must be shorter than 50 character. +// To add margin, set CMD_LINE_SIZE to 64. (padding size is included) +#define APPID_MAX_LENGTH 64 static std::string StandaloneOption("--standalone"); +static std::string PaddingOption("--PADDING_TO_CHANGE_CMDLINE_"); extern "C" int realMain(int argc, char *argv[], const char* mode) { @@ -38,6 +41,7 @@ extern "C" int realMain(int argc, char *argv[], const char* mode) bool standaloneMode = false; char* standalonePath = nullptr; bool corerunMode = false; + bool paddingExist = false; std::vector vargs; @@ -46,12 +50,14 @@ extern "C" int realMain(int argc, char *argv[], const char* mode) if (StandaloneOption.compare(argv[i]) == 0) { standaloneMode = true; - if (i > argc-1) { + if (i > argc - 1) { fprintf(stderr, "Assembly path must be after \"--standalone\" option\n"); return 1; } i++; standalonePath = argv[i]; + } if (PaddingOption.compare(argv[i]) == 0) { + paddingExist = true; } else { vargs.push_back(argv[i]); } @@ -69,7 +75,7 @@ extern "C" int realMain(int argc, char *argv[], const char* mode) if (corerunMode) { _INFO("##### Run it corerun Mode #########"); - char appId[1024] = {0,}; + char appId[APPID_MAX_LENGTH] = {0,}; std::string appRoot; snprintf(appId, 16, "%s", "dotnet-launcher"); appRoot = baseName(argv[1]); @@ -87,7 +93,7 @@ extern "C" int realMain(int argc, char *argv[], const char* mode) } } else if (standaloneMode) { _INFO("##### Run it standalone Mode #########"); - char appId[1024] = {0,}; + char appId[APPID_MAX_LENGTH] = {0,}; std::string appRoot; if (AUL_R_OK == aul_app_get_appid_bypid(getpid(), appId, sizeof(appId))) { const char* appRootPath = aul_get_app_root_path(); @@ -107,8 +113,9 @@ extern "C" int realMain(int argc, char *argv[], const char* mode) } // change cmdline from dotnet-launcher to executable path - memset(argv[0], '\0', CMD_LINE_SIZE); - snprintf(argv[0], CMD_LINE_SIZE - 1, "%s", appId); + int cmdlineSize = paddingExist ? APPID_MAX_LENGTH : APPID_MAX_LENGTH - PaddingOption.length(); + memset(argv[0], '\0', cmdlineSize); + snprintf(argv[0], cmdlineSize - 1, "%s", appId); int argsLen = vargs.size(); char** args = &vargs[0]; -- 2.7.4