Commit Diff


commit - 96dc2330918909c925a5c3a6407116dad7f93c3a
commit + 7ca1c90109e17dced4b38fbaadea9d2cf39871b7
blob - 10dcdcc85a291ebcaa9aeb5eee8590f18b46cbbf
blob + 742aabdf8bd3a43c3f8a2819cf77939aed50b45d
--- src/cmd/acme/acme.c
+++ src/cmd/acme/acme.c
@@ -383,7 +383,7 @@ int erroutfd;
 void
 acmeerrorproc(void *v)
 {
-	char *buf;
+	char *buf, *s;
 	int n;
 
 	USED(v);
@@ -391,8 +391,11 @@ acmeerrorproc(void *v)
 	buf = emalloc(8192+1);
 	while((n=read(errorfd, buf, 8192)) >= 0){
 		buf[n] = '\0';
-		sendp(cerr, estrdup(buf));
+		s = estrdup(buf);
+		sendp(cerr, s);
+		free(s);
 	}
+	free(buf);
 }
 
 void
blob - deaef0cb18584ac8aa158a6f5c43c11471f47e10
blob + 68c5d9769104ff055b0de019884778a8de944b40
--- src/cmd/acme/exec.c
+++ src/cmd/acme/exec.c
@@ -194,6 +194,7 @@ execute(Text *t, uint aq0, uint aq1, int external, Tex
 		aa = getbytearg(argt, TRUE, TRUE, &a);
 		if(a){	
 			if(strlen(a) > EVENTSIZE){	/* too big; too bad */
+				free(r);
 				free(aa);
 				free(a);
 				warning(nil, "argument string too long\n");
blob - 2d6cbccaa6ba055265cea571f81620de9c5806a0
blob + 8cff0855e2140069a19a50a947753dd852de7f88
--- src/cmd/acme/rows.c
+++ src/cmd/acme/rows.c
@@ -613,6 +613,7 @@ rowload(Row *row, char *file, int initing)
 			}
 			textdelete(&row->col[i]->tag, 0, row->col[i]->tag.file->b.nc, TRUE);
 			textinsert(&row->col[i]->tag, 0, r+n+1, nr-(n+1), TRUE);
+			free(r);
 			break;
 		case 'w':
 			l[Blinelen(b)-1] = 0;
@@ -626,6 +627,7 @@ rowload(Row *row, char *file, int initing)
 			}
 			textdelete(&row->tag, 0, row->tag.file->b.nc, TRUE);
 			textinsert(&row->tag, 0, r, nr, TRUE);
+			free(r);
 			break;
 		default:
 			done = 1;