[BusyBox] bug#1132: sh.c patch fixes problem

Larry Doolittle ldoolitt at recycle.lbl.gov
Wed Mar 14 17:07:50 UTC 2001


This patch fixes the problem for me.  Thanks to Fabrice for
finding the problem.  It was general to all usage errors that
caused parse_command to free_job(job); return 1;

    - Larry Doolittle   <LRDoolittle at lbl.gov>

--- /home/ldoolitt/cvs/busybox/sh.c	Wed Mar 14 08:18:52 2001
+++ sh.c	Wed Mar 14 09:01:57 2001
@@ -669,17 +669,22 @@
 static void free_job(struct job *cmd)
 {
 	int i;
+	struct jobset *keep;
 
 	for (i = 0; i < cmd->num_progs; i++) {
 		free(cmd->progs[i].argv);
 		if (cmd->progs[i].redirects)
 			free(cmd->progs[i].redirects);
 	}
-	free(cmd->progs);
+	if (cmd->progs)
+		free(cmd->progs);
 	if (cmd->text)
 		free(cmd->text);
-	free(cmd->cmdbuf);
+	if (cmd->cmdbuf)
+		free(cmd->cmdbuf);
+	keep = cmd->job_list;
 	memset(cmd, 0, sizeof(struct job));
+	cmd->job_list = keep;
 }
 
 /* remove a job from the job_list */
@@ -1296,7 +1301,7 @@
 					chptr++;
 
 				if (!*chptr) {
-					error_msg("file name expected after %c", *src);
+					error_msg("file name expected after %c", *(src-1));
 					free_job(job);
 					job->num_progs=0;
 					return 1;






More information about the busybox mailing list