diff --git a/src/interface.c b/src/interface.c index 50d26c912..e027506ea 100644 --- a/src/interface.c +++ b/src/interface.c @@ -6276,13 +6276,13 @@ void catalogue_ui(pixel * vid_buf) csave->image = resample_img(tmpimage, imgwidth, imgheight, XRES/CATALOGUE_S, YRES/CATALOGUE_S); free(tmpimage); } else { - //Blank image, this should default to something else - csave->image = malloc((XRES/CATALOGUE_S)*(YRES/CATALOGUE_S)*PIXELSIZE); + //Blank image, TODO: this should default to something else + csave->image = calloc((XRES/CATALOGUE_S)*(YRES/CATALOGUE_S), PIXELSIZE); } free(data); } else { - //Blank image, this should default to something else - csave->image = malloc((XRES/CATALOGUE_S)*(YRES/CATALOGUE_S)*PIXELSIZE); + //Blank image, TODO: this should default to something else + csave->image = calloc((XRES/CATALOGUE_S)*(YRES/CATALOGUE_S), PIXELSIZE); } imageoncycle = 1; } diff --git a/src/save.c b/src/save.c index f0055d8bb..4cfca43ac 100644 --- a/src/save.c +++ b/src/save.c @@ -58,6 +58,7 @@ pixel *prerender_save_OPS(void *save, int size, int *width, int *height) int inputDataLen = size, bsonDataLen = 0, partsDataLen, partsPosDataLen, wallDataLen; int i, x, y, j; int blockX, blockY, blockW, blockH, fullX, fullY, fullW, fullH; + int bsonInitialised = 0; pixel * vidBuf = NULL; bson b; bson_iterator iter; @@ -121,6 +122,7 @@ pixel *prerender_save_OPS(void *save, int size, int *width, int *height) } bson_init_data(&b, bsonData); + bsonInitialised = 1; bson_iterator_init(&iter, &b); while(bson_iterator_next(&iter)) { @@ -301,7 +303,9 @@ fail: vidBuf = NULL; } fin: - bson_destroy(&b); + //Don't call bson_destroy if bson_init wasn't called, or an uninitialised pointer (b.data) will be freed and the game will crash + if (bsonInitialised) + bson_destroy(&b); return vidBuf; }