From f8f66729d92ff2dc4d32ccf17d803cdbe7bc1722 Mon Sep 17 00:00:00 2001 From: John Darrington Date: Wed, 30 Mar 2016 08:17:48 +0200 Subject: [PATCH] Fixed crash when processing malformed NPAR TESTS BINOMIAL command. Found by zzuf. --- src/language/stats/npar.c | 11 +++++++---- tests/language/stats/npar.at | 22 +++++++++++----------- 2 files changed, 18 insertions(+), 15 deletions(-) diff --git a/src/language/stats/npar.c b/src/language/stats/npar.c index 7c2b37af15..b8cbb1bcf2 100644 --- a/src/language/stats/npar.c +++ b/src/language/stats/npar.c @@ -498,7 +498,6 @@ parse_npar_tests (struct lexer *lexer, struct dataset *ds, struct cmd_npar_tests if (!lex_match (lexer, T_SLASH)) break; } - if (lex_token (lexer) != T_ENDCMD) { lex_error (lexer, _("expecting end of command")); @@ -943,7 +942,10 @@ npar_binomial (struct lexer *lexer, struct dataset *ds, else equals = true; - if (equals || lex_match (lexer, T_EQUALS) ) + if (!equals) + if (!lex_force_match (lexer, T_EQUALS)) + return 0; + { if (parse_variables_const_pool (lexer, specs->pool, dataset_dict (ds), &tp->vars, &tp->n_vars, @@ -970,8 +972,9 @@ npar_binomial (struct lexer *lexer, struct dataset *ds, } } else - return 2; - + { + return 2; + } } specs->n_tests++; diff --git a/tests/language/stats/npar.at b/tests/language/stats/npar.at index a7e1331e68..ed829cdc52 100644 --- a/tests/language/stats/npar.at +++ b/tests/language/stats/npar.at @@ -1,6 +1,6 @@ AT_BANNER([NPAR TESTS]) -AT_SETUP([NPAR TESTS BINOMIAL, P < 0.5; N1/N2 < 1]) +AT_SETUP([NPAR TESTS BINOMIAL P < 0.5; N1/N2 < 1]) AT_DATA([npar.sps], [dnl SET FORMAT F8.3. @@ -25,7 +25,7 @@ x,Group1,1.000,6.000,.286,.300,.551 ]) AT_CLEANUP -AT_SETUP([NPAR TESTS BINOMIAL, P < 0.5; N1/N2 > 1]) +AT_SETUP([NPAR TESTS BINOMIAL P < 0.5; N1/N2 > 1]) AT_DATA([npar.sps], [dnl SET FORMAT F8.3. @@ -50,7 +50,7 @@ x,Group1,1,7,.538,.400,.229 ]) AT_CLEANUP -AT_SETUP([NPAR TESTS BINOMIAL, P < 0.5; N1/N2 = 1]) +AT_SETUP([NPAR TESTS BINOMIAL P < 0.5; N1/N2 = 1]) AT_DATA([npar.sps], [dnl SET FORMAT F8.3. @@ -75,7 +75,7 @@ x,Group1,1,8,.500,.400,.284 ]) AT_CLEANUP -AT_SETUP([NPAR TESTS BINOMIAL, P > 0.5; N1/N2 < 1]) +AT_SETUP([NPAR TESTS BINOMIAL P > 0.5; N1/N2 < 1]) AT_DATA([npar.sps], [dnl SET FORMAT F8.3. @@ -100,7 +100,7 @@ x,Group1,1,11,.478,.600,.164 ]) AT_CLEANUP -AT_SETUP([NPAR TESTS BINOMIAL, P > 0.5; N1/N2 > 1]) +AT_SETUP([NPAR TESTS BINOMIAL P > 0.5; N1/N2 > 1]) AT_DATA([npar.sps], [dnl SET FORMAT F8.3. @@ -124,7 +124,7 @@ x,Group1,1,11,.550,.600,.404 ]) AT_CLEANUP -AT_SETUP([NPAR TESTS BINOMIAL, P > 0.5; N1/N2 = 1]) +AT_SETUP([NPAR TESTS BINOMIAL P > 0.5; N1/N2 = 1]) AT_DATA([npar.sps], [dnl SET FORMAT F8.3. @@ -148,7 +148,7 @@ x,Group1,1,11,.500,.600,.228 ]) AT_CLEANUP -AT_SETUP([NPAR TESTS BINOMIAL, P = 0.5; N1/N2 < 1]) +AT_SETUP([NPAR TESTS BINOMIAL P = 0.5; N1/N2 < 1]) AT_DATA([npar.sps], [dnl SET FORMAT F8.3. @@ -173,7 +173,7 @@ x,Group1,1,8,.348,.500,.210 ]) AT_CLEANUP -AT_SETUP([NPAR TESTS BINOMIAL, P = 0.5; N1/N2 > 1]) +AT_SETUP([NPAR TESTS BINOMIAL P = 0.5; N1/N2 > 1]) AT_DATA([npar.sps], [dnl SET FORMAT F8.3. @@ -197,7 +197,7 @@ x,Group1,1,12,.667,.500,.238 ]) AT_CLEANUP -AT_SETUP([NPAR TESTS BINOMIAL, P = 0.5; N1/N2 = 1]) +AT_SETUP([NPAR TESTS BINOMIAL P = 0.5; N1/N2 = 1]) AT_DATA([npar.sps], [dnl SET FORMAT F8.3. @@ -222,7 +222,7 @@ x,Group1,1,10,.500,.500,1.000 ]) AT_CLEANUP -AT_SETUP([NPAR TESTS BINOMIAL, P = 0.5; N1/N2 = 1 Cutpoint]) +AT_SETUP([NPAR TESTS BINOMIAL P = 0.5; N1/N2 = 1 Cutpoint]) AT_DATA([npar.sps], [dnl SET FORMAT F8.3. @@ -248,7 +248,7 @@ x,Group1,<= 10,10.000,.385,.500,.327 ]) AT_CLEANUP -AT_SETUP([NPAR TESTS BINOMIAL, P = 0.5; N1/N2 = 1 Named values]) +AT_SETUP([NPAR TESTS BINOMIAL P = 0.5; N1/N2 = 1 Named values]) AT_DATA([npar.sps], [dnl SET FORMAT F8.3. -- 2.30.2