Browse code

bb11160 - Plug a few memory leaks

Shawn Webb authored on 2014/11/05 08:38:34
Showing 3 changed files
... ...
@@ -1441,6 +1441,7 @@ int recvloop_th(int *socketds, unsigned nsockets, struct cl_engine *engine, unsi
1441 1441
 	pthread_kill(fan_pid, SIGUSR1);
1442 1442
 	pthread_mutex_unlock(&logg_mutex);
1443 1443
 	pthread_join(fan_pid, NULL);
1444
+    free(tharg);
1444 1445
     }
1445 1446
 #endif
1446 1447
     if(engine) {
... ...
@@ -836,8 +836,10 @@ static int asn1_parse_mscat(fmap_t *map, size_t offset, unsigned int size, crtmg
836 836
 		    break;
837 837
 		}
838 838
 	    }
839
-	    if(dsize)
840
-		break;
839
+	    if(dsize) {
840
+            crtmgr_free(&newcerts);
841
+            break;
842
+        }
841 843
 	    if(newcerts.crts) {
842 844
 		x509 = newcerts.crts;
843 845
 		cli_dbgmsg("asn1_parse_mscat: %u new certificates collected\n", newcerts.items);
... ...
@@ -877,8 +879,10 @@ static int asn1_parse_mscat(fmap_t *map, size_t offset, unsigned int size, crtmg
877 877
 		    }
878 878
 		    x509 = x509->next;
879 879
 		}
880
-		if(x509)
880
+		if(x509) {
881
+            crtmgr_free(&newcerts);
881 882
 		    break;
883
+        }
882 884
 		if(newcerts.items)
883 885
 		    cli_dbgmsg("asn1_parse_mscat: %u certificates did not verify\n", newcerts.items);
884 886
 		crtmgr_free(&newcerts);
... ...
@@ -124,7 +124,7 @@ static int scancws(cli_ctx *ctx, struct swf_file_hdr *hdr)
124 124
 	z_stream stream;
125 125
 	char inbuff[FILEBUFF], outbuff[FILEBUFF];
126 126
 	fmap_t *map = *ctx->fmap;
127
-	int offset = 8, ret, zret, outsize = 8, count;
127
+	int offset = 8, ret, zret, outsize = 8, count, zend;
128 128
 	char *tmpname;
129 129
 	int fd;
130 130
 
... ...
@@ -174,9 +174,11 @@ static int scancws(cli_ctx *ctx, struct swf_file_hdr *hdr)
174 174
 		close(fd);
175 175
 		if(cli_unlink(tmpname)) {
176 176
 		    free(tmpname);
177
+            inflateEnd(&stream);
177 178
 		    return CL_EUNLINK;
178 179
 		}
179 180
 		free(tmpname);
181
+        inflateEnd(&stream);
180 182
 		return CL_EUNPACK;
181 183
 	    }
182 184
 	    if(!ret)
... ...
@@ -205,7 +207,9 @@ static int scancws(cli_ctx *ctx, struct swf_file_hdr *hdr)
205 205
 	stream.avail_out = FILEBUFF;
206 206
     } while(zret == Z_OK);
207 207
 
208
-    if((zret != Z_STREAM_END && zret != Z_OK) || (zret = inflateEnd(&stream)) != Z_OK) {
208
+    zend = inflateEnd(&stream);
209
+
210
+    if((zret != Z_STREAM_END && zret != Z_OK) || zend != Z_OK) {
209 211
         /*
210 212
          * outsize is initialized to 8, it being 8 here means that we couldn't even read a single byte.
211 213
          * If outsize > 8, then we have data. Let's scan what we have.