diff --git a/src/restore.c b/src/restore.c index a7883a0a1..b11c31793 100644 --- a/src/restore.c +++ b/src/restore.c @@ -1060,8 +1060,10 @@ getlev(NHFILE *nhfp, int pid, xint8 lev) if (gd.doors) free(gd.doors); Mread(nhfp->fd, &gd.doors_alloc, sizeof gd.doors_alloc); - gd.doors = (coord *) alloc(gd.doors_alloc * sizeof (coord)); - Mread(nhfp->fd, gd.doors, gd.doors_alloc * sizeof (coord)); + if (gd.doors_alloc) { /* avoid pointless alloc(0) */ + gd.doors = (coord *) alloc(gd.doors_alloc * sizeof (coord)); + Mread(nhfp->fd, gd.doors, gd.doors_alloc * sizeof (coord)); + } } rest_rooms(nhfp); /* No joke :-) */ if (gn.nroom) diff --git a/src/save.c b/src/save.c index 044036ffe..148f2d630 100644 --- a/src/save.c +++ b/src/save.c @@ -533,7 +533,11 @@ savelev_core(NHFILE *nhfp, xint8 lev) bwrite(nhfp->fd, (genericptr_t) &gd.dndest, sizeof (dest_area)); bwrite(nhfp->fd, (genericptr_t) &gl.level.flags, sizeof gl.level.flags); bwrite(nhfp->fd, (genericptr_t) &gd.doors_alloc, sizeof gd.doors_alloc); - bwrite(nhfp->fd, (genericptr_t) gd.doors, gd.doors_alloc * sizeof (coord)); + /* don't rely on underlying write() behavior to write + * nothing if count arg is 0, just skip it */ + if (gd.doors_alloc) + bwrite(nhfp->fd, (genericptr_t) gd.doors, + gd.doors_alloc * sizeof (coord)); } save_rooms(nhfp); /* no dynamic memory to reclaim */