From 24808344f459f854c2f90e8c586da0619b23226b Mon Sep 17 00:00:00 2001 From: jacksonmj Date: Thu, 14 Apr 2011 18:34:25 +0100 Subject: Fix some memory leaks in save build/parse diff --git a/src/main.c b/src/main.c index b00f199..c06af76 100644 --- a/src/main.c +++ b/src/main.c @@ -477,9 +477,11 @@ void *build_save(int *size, int x0, int y0, int w, int h, unsigned char bmap[YRE { free(d); free(c); + free(m); return NULL; } free(d); + free(m); *size = i+12; return c; @@ -487,8 +489,8 @@ void *build_save(int *size, int x0, int y0, int w, int h, unsigned char bmap[YRE int parse_save(void *save, int size, int replace, int x0, int y0, unsigned char bmap[YRES/CELL][XRES/CELL], float fvx[YRES/CELL][XRES/CELL], float fvy[YRES/CELL][XRES/CELL], sign signs[MAXSIGNS], void* partsptr, unsigned pmap[YRES][XRES]) { - unsigned char *d,*c=save; - int q,i,j,k,x,y,p=0,*m=calloc(XRES*YRES, sizeof(int)), ver, pty, ty, legacy_beta=0; + unsigned char *d=NULL,*c=save; + int q,i,j,k,x,y,p=0,*m=NULL, ver, pty, ty, legacy_beta=0; int bx0=x0/CELL, by0=y0/CELL, bw, bh, w, h; int fp[NPART], nf=0, new_format = 0, ttv = 0; particle *parts = partsptr; @@ -573,6 +575,7 @@ int parse_save(void *save, int size, int replace, int x0, int y0, unsigned char } clear_sim(); } + m = calloc(XRES*YRES, sizeof(int)); // make a catalog of free parts memset(pmap, 0, sizeof(pmap)); @@ -897,11 +900,14 @@ int parse_save(void *save, int size, int replace, int x0, int y0, unsigned char } version1: - free(d); + if (m) free(m); + if (d) free(d); return 0; corrupt: + if (m) free(m); + if (d) free(d); if (replace) { legacy_enable = 0; -- cgit v0.9.2-21-gd62e