From 27bd188495ec1a6085354b10545daba47771b517 Mon Sep 17 00:00:00 2001 From: Ben Pfaff Date: Tue, 17 Apr 2012 21:26:21 -0700 Subject: [PATCH] DO IF: Fix crash when END IF appears without DO IF. Reported by Jill Covert. Bug #36231. --- src/language/control/do-if.c | 4 ++-- tests/language/control/do-if.at | 10 ++++++++++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/language/control/do-if.c b/src/language/control/do-if.c index fe9ca73008..a44f6e8189 100644 --- a/src/language/control/do-if.c +++ b/src/language/control/do-if.c @@ -1,5 +1,5 @@ /* PSPP - a program for statistical analysis. - Copyright (C) 1997-9, 2000, 2009-2011 Free Software Foundation, Inc. + Copyright (C) 1997-9, 2000, 2009-2012 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -136,11 +136,11 @@ int cmd_end_if (struct lexer *lexer UNUSED, struct dataset *ds) { struct do_if_trns *do_if = ctl_stack_top (&do_if_class); - assert (ds == do_if->ds); if (do_if == NULL) return CMD_CASCADING_FAILURE; + assert (ds == do_if->ds); ctl_stack_pop (do_if); return CMD_SUCCESS; diff --git a/tests/language/control/do-if.at b/tests/language/control/do-if.at index 45f696a3b7..9f1457cce7 100644 --- a/tests/language/control/do-if.at +++ b/tests/language/control/do-if.at @@ -48,3 +48,13 @@ EXECUTE. AT_CHECK([pspp do-if.sps], [0], [ignore]) AT_CHECK([cat do-if.out], [0], [expout]) AT_CLEANUP + +AT_SETUP([unpaired END IF crash]) +AT_DATA([do-if.sps], [dnl +DATA LIST LIST NOTABLE/a b c. +END IF. +]) +AT_CHECK([pspp -O format=csv do-if.sps], [0], [dnl +do-if.pspp:2: error: END IF: This command cannot appear outside DO IF...END IF. +]) +AT_CLEANUP -- 2.30.2