Skip to content

Commit b3f0b7a

Browse files
authored
quote CMDLINE env var exe name if needed, fix memory leak in expandEnvVars, memory corruption in set command (#104)
* update version strings and history * fix NASM segment attribute redefinition warning * OpenWatcom 1.9 warning fixes * add binary extensions to .gitignore * fix #102 multi-line command line editing * make sure executable name contains quotation marks if needed * fix memory leak in expandEnvVars and memory corruption in set command adapt to messed up indentation
1 parent 269c421 commit b3f0b7a

File tree

2 files changed

+17
-7
lines changed

2 files changed

+17
-7
lines changed

cmd/set.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ int cmd_set(char *param)
9292
error_out_of_memory();
9393
return E_NoMem;
9494
}
95-
len = dos_read(0, promptBuf, promptBuffer);
95+
len = dos_read(0, promptBuf, promptBuffer-1);
9696
if(cbreak || len < 0) {
9797
free(promptBuf);
9898
return E_CBreak;

shell/command.c

+16-6
Original file line numberDiff line numberDiff line change
@@ -215,9 +215,15 @@ void execute(char *first, char *rest, int lh_lf)
215215
dprintf(("[EXEC: %s %s]\n", fullname, rest));
216216

217217
if(strlen(rest) > MAX_EXTERNAL_COMMAND_SIZE) {
218-
char *fullcommandline = malloc( strlen( first ) + strlen( rest ) + 2 );
218+
char *fullcommandline = malloc( strlen( first ) + strlen( rest ) + 3 );
219219
if( fullcommandline == NULL ) return;
220-
sprintf( fullcommandline, "%s%s", first, rest );
220+
if ( strchr( first, ' ' ) ) {
221+
sprintf( fullcommandline, "\"%s\"%s", first, rest );
222+
223+
}
224+
else {
225+
sprintf( fullcommandline, "%s%s", first, rest );
226+
}
221227
if( chgEnv( LONG_CMDLINE_ENV_NAME, fullcommandline ) != 0 ) {
222228
free( fullcommandline );
223229
return;
@@ -686,8 +692,10 @@ int expandEnvVars(char *ip, char * const line)
686692
*tp = '\0';
687693

688694
if((evar = getEnv(ip)) != 0) {
689-
if(cp >= parsedMax(strlen(evar)))
690-
return 0;
695+
if(cp >= parsedMax(strlen(evar))) {
696+
free(evar);
697+
return 0;
698+
}
691699
cp = stpcpy(cp, evar);
692700
free(evar);
693701
} else if(matchtok(ip, "ERRORLEVEL")) {
@@ -698,8 +706,10 @@ int expandEnvVars(char *ip, char * const line)
698706
if(0 == (evar = cwd(0))) {
699707
return 0;
700708
} else {
701-
if(cp >= parsedMax(strlen(evar)))
702-
return 0;
709+
if(cp >= parsedMax(strlen(evar))) {
710+
free(evar);
711+
return 0;
712+
}
703713
cp = stpcpy(cp, evar);
704714
free(evar);
705715
}

0 commit comments

Comments
 (0)