diff options
| author | jacksonmj <mj-pt@jacksonmj.co.uk> | 2011-04-14 17:34:25 (GMT) |
|---|---|---|
| committer | Simon <simon@hardwired.org.uk> | 2011-04-16 16:26:18 (GMT) |
| commit | 24808344f459f854c2f90e8c586da0619b23226b (patch) | |
| tree | 7ad8459ca9c76861c01f5f7f677ef991dc261291 /src | |
| parent | d6a28b642758a4c48168704f378db459dfd49ba2 (diff) | |
| download | powder-24808344f459f854c2f90e8c586da0619b23226b.zip powder-24808344f459f854c2f90e8c586da0619b23226b.tar.gz | |
Fix some memory leaks in save build/parse
Diffstat (limited to 'src')
| -rw-r--r-- | src/main.c | 12 |
1 files changed, 9 insertions, 3 deletions
@@ -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; |
