Browse code

shared/cdiff.c, sigtool/sigtool.c: fix error path double frees (bb#2280, bb#2281)

Tomasz Kojm authored on 2010/09/21 23:14:15
Showing 3 changed files
... ...
@@ -1,3 +1,8 @@
1
+Tue Sep 21 16:13:27 CEST 2010 (tk)
2
+----------------------------------
3
+ * shared/cdiff.c, sigtool/sigtool.c: fix error path double frees
4
+				      (bb#2280, bb#2281)
5
+
1 6
 Mon Sep 20 17:09:37 CEST 2010 (tk)
2 7
 ----------------------------------
3 8
  * V 0.96.3
... ...
@@ -934,8 +934,16 @@ int cdiff_apply(int fd, unsigned short mode)
934 934
 			logg("!cdiff_apply: Can't resize line buffer to %d bytes\n", line_size);
935 935
 			cdiff_ctx_free(&ctx);
936 936
 			gzclose(gzh);
937
-			free(line);
938
-			free(lbuf);
937
+			if(!r1 && !r2) {
938
+			    free(line);
939
+			    free(lbuf);
940
+			} else if(!r1) {
941
+			    free(line);
942
+			    free(r2);
943
+			} else {
944
+			    free(r1);
945
+			    free(lbuf);
946
+			}
939 947
 			return -1;
940 948
 		    }
941 949
 		    line = r1;
... ...
@@ -683,7 +683,6 @@ static int build(const struct optstruct *opts)
683 683
 			lspt->name = strdup(dent->d_name);
684 684
 			if(!lspt->name) {
685 685
 			    FREE_LS(dblist2);
686
-			    free(lspt);
687 686
 			    mprintf("!build: Memory allocation error\n");
688 687
 			    return -1;
689 688
 			}