diff --git a/cmd/set.c b/cmd/set.c index ef3f37ea..46e380c0 100644 --- a/cmd/set.c +++ b/cmd/set.c @@ -92,7 +92,7 @@ int cmd_set(char *param) error_out_of_memory(); return E_NoMem; } - len = dos_read(0, promptBuf, promptBuffer); + len = dos_read(0, promptBuf, promptBuffer-1); if(cbreak || len < 0) { free(promptBuf); return E_CBreak; diff --git a/shell/command.c b/shell/command.c index f757734c..a1568915 100644 --- a/shell/command.c +++ b/shell/command.c @@ -215,9 +215,15 @@ void execute(char *first, char *rest, int lh_lf) dprintf(("[EXEC: %s %s]\n", fullname, rest)); if(strlen(rest) > MAX_EXTERNAL_COMMAND_SIZE) { - char *fullcommandline = malloc( strlen( first ) + strlen( rest ) + 2 ); + char *fullcommandline = malloc( strlen( first ) + strlen( rest ) + 3 ); if( fullcommandline == NULL ) return; - sprintf( fullcommandline, "%s%s", first, rest ); + if ( strchr( first, ' ' ) ) { + sprintf( fullcommandline, "\"%s\"%s", first, rest ); + + } + else { + sprintf( fullcommandline, "%s%s", first, rest ); + } if( chgEnv( LONG_CMDLINE_ENV_NAME, fullcommandline ) != 0 ) { free( fullcommandline ); return; @@ -686,8 +692,10 @@ int expandEnvVars(char *ip, char * const line) *tp = '\0'; if((evar = getEnv(ip)) != 0) { - if(cp >= parsedMax(strlen(evar))) - return 0; + if(cp >= parsedMax(strlen(evar))) { + free(evar); + return 0; + } cp = stpcpy(cp, evar); free(evar); } else if(matchtok(ip, "ERRORLEVEL")) { @@ -698,8 +706,10 @@ int expandEnvVars(char *ip, char * const line) if(0 == (evar = cwd(0))) { return 0; } else { - if(cp >= parsedMax(strlen(evar))) - return 0; + if(cp >= parsedMax(strlen(evar))) { + free(evar); + return 0; + } cp = stpcpy(cp, evar); free(evar); }