X-Git-Url: https://tinc-vpn.org/git/browse?p=tinc;a=blobdiff_plain;f=src%2Fscript.c;h=d4db8894de860b0b5a40010d7ccb5a05409c2430;hp=5ca56737df8eed573a7bc3de36425422aedfff44;hb=c2dc3784f127ef6db6e9960a4abecc1aab6f4e31;hpb=cadbf587a09bd4adde664cd635b962315228b3f5 diff --git a/src/script.c b/src/script.c index 5ca56737..d4db8894 100644 --- a/src/script.c +++ b/src/script.c @@ -64,7 +64,6 @@ static void unputenv(const char *p) {} #endif bool execute_script(const char *name, char **envp) { -#ifdef HAVE_SYSTEM char scriptname[PATH_MAX]; char *command; @@ -75,9 +74,11 @@ bool execute_script(const char *name, char **envp) { #ifdef HAVE_MINGW if(!*scriptextension) { const char *pathext = getenv("PATHEXT") ?: ".COM;.EXE;.BAT;.CMD"; - char fullname[strlen(scriptname) + strlen(pathext)]; - char *ext = fullname + strlen(scriptname); - strcpy(fullname, scriptname); + size_t pathlen = strlen(pathext); + size_t scriptlen = strlen(scriptname); + char fullname[scriptlen + pathlen + 1]; + char *ext = fullname + scriptlen; + strncpy(fullname, scriptname, sizeof fullname); const char *p = pathext; bool found = false; @@ -88,7 +89,7 @@ bool execute_script(const char *name, char **envp) { ext[q - p] = 0; q++; } else { - strcpy(ext, p); + strncpy(ext, p, pathlen + 1); } if((found = !access(fullname, F_OK))) break; @@ -144,6 +145,6 @@ bool execute_script(const char *name, char **envp) { logger(DEBUG_ALWAYS, LOG_ERR, "System call `%s' failed: %s", "system", strerror(errno)); return false; } -#endif + return true; }