From eb1521cd226e0b8cafab7c72d860b21eda71662f Mon Sep 17 00:00:00 2001 From: Ben Pfaff Date: Sat, 18 Mar 2023 14:41:40 -0700 Subject: [PATCH] MATRIX: Check format specifier on PRINT command. Thanks to Youngseok Choi for reporting the bug. --- src/language/commands/matrix.c | 9 ++++++ tests/language/commands/matrix.at | 52 +++++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+) diff --git a/src/language/commands/matrix.c b/src/language/commands/matrix.c index 9076476ed7..332678160c 100644 --- a/src/language/commands/matrix.c +++ b/src/language/commands/matrix.c @@ -5389,6 +5389,15 @@ matrix_print_parse (struct matrix_state *s) lex_match (s->lexer, T_EQUALS); if (!parse_format_specifier (s->lexer, &cmd->print.format)) goto error; + + char *error = fmt_check_output__ (cmd->print.format); + if (error) + { + lex_next_error (s->lexer, -1, -1, "%s", error); + free (error); + goto error; + } + cmd->print.use_default_format = false; } else if (lex_match_id (s->lexer, "TITLE")) diff --git a/tests/language/commands/matrix.at b/tests/language/commands/matrix.at index 9ebd23671f..5cc52b2792 100644 --- a/tests/language/commands/matrix.at +++ b/tests/language/commands/matrix.at @@ -2856,6 +2856,58 @@ a. × 10**12 ]) AT_CLEANUP +AT_SETUP([MATRIX - PRINT - negative]) +AT_DATA([matrix.sps], [dnl +MATRIX. +PRINT !. +PRINT/FORMAT=!. +PRINT/FORMAT=P52. +PRINT/TITLE=!. +PRINT/SPACE=0. +PRINT/RNAMES=!. +PRINT/CNAMES=!. +PRINT/!. +END MATRIX. +]) + +AT_CHECK([pspp matrix.sps], [1], [dnl +matrix.sps:2.7: error: PRINT: Syntax error expecting matrix expression. + 2 | PRINT !. + | ^ + +matrix.sps:3.14: error: PRINT: Syntax error expecting valid format specifier. + 3 | PRINT/FORMAT=!. + | ^ + +matrix.sps:4.14-4.16: error: PRINT: Output format P52.0 specifies width 52, but +P requires a width between 1 and 16. + 4 | PRINT/FORMAT=P52. + | ^~~ + +matrix.sps:5.13: error: PRINT: Syntax error expecting string. + 5 | PRINT/TITLE=!. + | ^ + +matrix.sps:6.13: error: PRINT: Syntax error expecting positive integer for +SPACE. + 6 | PRINT/SPACE=0. + | ^ + +matrix.sps:7.14: error: PRINT: Syntax error expecting matrix expression. + 7 | PRINT/RNAMES=!. + | ^ + +matrix.sps:8.14: error: PRINT: Syntax error expecting matrix expression. + 8 | PRINT/CNAMES=!. + | ^ + +matrix.sps:9.7: error: PRINT: Syntax error expecting FORMAT, TITLE, SPACE, +RLABELS, CLABELS, RNAMES, or CNAMES. + 9 | PRINT/!. + | ^ +]) +AT_CLEANUP + AT_SETUP([MATRIX - DO IF]) AT_DATA([matrix.sps], [dnl MATRIX. -- 2.30.2