From 50fff4a3fd07c7805efef5ff24086c0a2c597955 Mon Sep 17 00:00:00 2001 From: John Darrington Date: Thu, 24 Mar 2016 20:30:36 +0100 Subject: [PATCH] Fixed crash in T-TEST when a non-number was passed where a number was expected. Found by zzuf. --- src/language/stats/t-test-parser.c | 6 ++++-- tests/language/stats/t-test.at | 20 ++++++++++++++++++++ 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/src/language/stats/t-test-parser.c b/src/language/stats/t-test-parser.c index 660997e95c..bc9de94a40 100644 --- a/src/language/stats/t-test-parser.c +++ b/src/language/stats/t-test-parser.c @@ -80,7 +80,8 @@ cmd_t_test (struct lexer *lexer, struct dataset *ds) mode_count++; tt.mode = MODE_SINGLE; lex_match (lexer, T_EQUALS); - lex_force_num (lexer); + if (!lex_force_num (lexer)) + goto parse_failed; testval = lex_number (lexer); lex_get (lexer); } @@ -276,7 +277,8 @@ cmd_t_test (struct lexer *lexer, struct dataset *ds) if ( lex_match_id (lexer, "CIN") || lex_force_match_id (lexer, "CI")) if ( lex_force_match (lexer, T_LPAREN)) { - lex_force_num (lexer); + if (!lex_force_num (lexer)) + goto parse_failed; tt.confidence = lex_number (lexer); lex_get (lexer); lex_force_match (lexer, T_RPAREN); diff --git a/tests/language/stats/t-test.at b/tests/language/stats/t-test.at index 0ad76faa53..455d288920 100644 --- a/tests/language/stats/t-test.at +++ b/tests/language/stats/t-test.at @@ -819,3 +819,23 @@ t-test /variables = x group=g(1,3). AT_CHECK([pspp t-test-crs.sps], [0],[ignore], [ignore]) AT_CLEANUP + + + +dnl Tests for a bug assert failed when a non-number was passes as the p value +AT_SETUP([T-TEST non number p value]) +AT_DATA([t.sps], [dnl +data list list /age d_frage_1 weight height *. +begin data. +1 2 3 1 +4 5 6 2 +end data. + +T-TEST /VARIABLES=age weight height + /GROUPS=d_frage_1(1,0) /MISSING=ANALYSIS /CRITERIA=CIN(p.95). +]) + +AT_CHECK([pspp t.sps], [1],[ignore], [ignore]) + +AT_CLEANUP + -- 2.30.2