From 4b1c4728d690fe0da3bb3aff1f11ca01621c6962 Mon Sep 17 00:00:00 2001 From: "nethack.allison" Date: Mon, 3 Jul 2006 14:30:01 +0000 Subject: [PATCH] region memory wrote on Tuesday, July 27, 2004 at 06:46:15 > In the region.c function rest_regions allocates storage for the possible > enter_msg and leave_msg strings. But the function free_region does not relese > this storage. Also ensures that some code that is currently ifdef'd out makes copies of the strings into memory from alloc() to ensure that no problems with free() result if the function gets passed a literal string. --- src/region.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/region.c b/src/region.c index 91ea28df0..8d4e2d4d3 100644 --- a/src/region.c +++ b/src/region.c @@ -274,6 +274,10 @@ NhRegion *reg; free((genericptr_t) reg->rects); if (reg->monsters) free((genericptr_t) reg->monsters); + if (reg->enter_msg) + free((genericptr_t) reg->enter_msg); + if (reg->leave_msg) + free((genericptr_t) reg->leave_msg); free((genericptr_t) reg); } } @@ -791,8 +795,14 @@ const char *msg_leave; NhRect tmprect; NhRegion *reg = create_region((NhRect *) 0, 0); - reg->enter_msg = msg_enter; - reg->leave_msg = msg_leave; + if (msg_enter) { + reg->enter_msg = (const char *) alloc(strlen(msg_enter) + 1); + Strcpy(reg->enter_msg, msg_enter); + } + if (msg_leave) { + reg->leave_msg = (const char *) alloc(strlen(msg_leave) + 1); + Strcpy(reg->leave_msg, msg_leave); + } tmprect.lx = x; tmprect.ly = y; tmprect.hx = x + w; -- 2.40.0