diff --git a/docs/Changes.txt b/docs/Changes.txt index b083225..f574488 100644 --- a/docs/Changes.txt +++ b/docs/Changes.txt @@ -12,6 +12,15 @@ platform used. There should be another help file in this archive outlining the platform specific changes. +---------------------------------------------------------------------- +Section: New in release 0.95.5 +---------------------------------------------------------------------- + +Fixed a bug causing crashes on program exit (a pointer to a local + struct kept being used later on, trashing the stack). Thanks to + Hoeppie for reporting this. + + ---------------------------------------------------------------------- Section: New in release 0.95.4 ---------------------------------------------------------------------- diff --git a/src/acme.c b/src/acme.c index 7e3b79a..76959db 100644 --- a/src/acme.c +++ b/src/acme.c @@ -15,10 +15,10 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -#define RELEASE "0.95.4" // update before release (FIXME) +#define RELEASE "0.95.5" // update before release (FIXME) #define CODENAME "Fenchurch" // update before release -#define CHANGE_DATE "22 Dec" // update before release -#define CHANGE_YEAR "2014" // update before release +#define CHANGE_DATE "5 Feb" // update before release +#define CHANGE_YEAR "2015" // update before release //#define HOME_PAGE "http://home.pages.de/~mac_bacon/smorbrod/acme/" // FIXME #define HOME_PAGE "http://sourceforge.net/p/acme-crossass/" // FIXME @@ -172,7 +172,7 @@ static int report_open(struct report *report, const char *filename) // close report file static void report_close(struct report *report) { - if (report->fd) { + if (report && report->fd) { fclose(report->fd); report->fd = NULL; } @@ -269,14 +269,14 @@ static int perform_pass(void) } -// do passes until done (or errors occured). Return whether output is ready. +static struct report global_report; +// do passes until done (or errors occurred). Return whether output is ready. static int do_actual_work(void) { - struct report my_report; int undefined_prev, // "NeedValue" errors of previous pass undefined_curr; // "NeedValue" errors of current pass - report = &my_report; // let global pointer point to something + report = &global_report; // let global pointer point to something report_init(report); // we must init struct before doing passes if (Process_verbosity > 1) puts("First pass.");