diff --git a/NEWS b/NEWS index a62d2b55..45953fac 100644 --- a/NEWS +++ b/NEWS @@ -1,5 +1,9 @@ -*-Mode: outline-*- +* News for v0.98.6: + +** Fix address-leak triggered by invalid byte-order. Fixed by Andreas Schwab. + * News for v0.98.5: ** Fix a typo in the man-page of unw_create_addr_space(). diff --git a/src/ia64/Gcreate_addr_space.c b/src/ia64/Gcreate_addr_space.c index 6178cbf3..a3524a0a 100644 --- a/src/ia64/Gcreate_addr_space.c +++ b/src/ia64/Gcreate_addr_space.c @@ -33,14 +33,7 @@ unw_create_addr_space (unw_accessors_t *a, int byte_order) #ifdef UNW_LOCAL_ONLY return NULL; #else - unw_addr_space_t as = malloc (sizeof (*as)); - - if (!as) - return NULL; - - memset (as, 0, sizeof (*as)); - - as->acc = *a; + unw_addr_space_t as; /* * IA-64 supports only big or little-endian, not weird stuff like @@ -51,6 +44,15 @@ unw_create_addr_space (unw_accessors_t *a, int byte_order) && byte_order != __BIG_ENDIAN) return NULL; + as = malloc (sizeof (*as)); + + if (!as) + return NULL; + + memset (as, 0, sizeof (*as)); + + as->acc = *a; + if (byte_order == 0) /* use host default: */ as->big_endian = (__BYTE_ORDER == __BIG_ENDIAN);