From: John Darrington Date: Tue, 5 Apr 2016 18:01:35 +0000 (+0200) Subject: Add test for PERMISSIONS with bad syntax X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6276f76974fc271d325e9756357618c384a33b82;p=pspp Add test for PERMISSIONS with bad syntax --- diff --git a/src/language/lexer/lexer.c b/src/language/lexer/lexer.c index 1f455119f0..08d35d8c00 100644 --- a/src/language/lexer/lexer.c +++ b/src/language/lexer/lexer.c @@ -604,9 +604,16 @@ lex_force_match (struct lexer *lexer, enum token_type type) } else { - char *s = xasprintf ("`%s'", token_type_to_string (type)); - lex_error_expecting (lexer, s, NULL_SENTINEL); - free (s); + const char *type_string = token_type_to_string (type); + if (type_string) + { + char *s = xasprintf ("`%s'", type_string); + lex_error_expecting (lexer, s, NULL_SENTINEL); + free (s); + } + else + lex_error_expecting (lexer, token_type_to_name (type), NULL_SENTINEL); + return false; } } diff --git a/src/language/utilities/permissions.c b/src/language/utilities/permissions.c index 904ba95b27..3f679c150e 100644 --- a/src/language/utilities/permissions.c +++ b/src/language/utilities/permissions.c @@ -51,9 +51,10 @@ cmd_permissions (struct lexer *lexer, struct dataset *ds UNUSED) lex_match (lexer, T_EQUALS); str = lex_tokcstr (lexer); - fn = strdup (str); + if (str) + fn = strdup (str); - if (!lex_force_match (lexer, T_STRING)) + if (!lex_force_match (lexer, T_STRING) || str == NULL) goto error; lex_match (lexer, T_SLASH); diff --git a/tests/language/utilities/permissions.at b/tests/language/utilities/permissions.at index 873057c85e..56698c337c 100644 --- a/tests/language/utilities/permissions.at +++ b/tests/language/utilities/permissions.at @@ -23,3 +23,14 @@ AT_CHECK([ls -l foobar], [0], [stdout]) AT_CHECK([sed 's/^\(..........\).*/\1/' stdout], [0], [-rw-r--r-- ]) AT_CLEANUP + + + +AT_SETUP([PERMISSIONS - bad syntax]) +AT_DATA([pe.sps], [[PERMI|SIONS /FILE='foobar' PERMISSIONS=WRITEABLE. +]]) + +AT_CHECK([pspp -O format=csv pe.sps], [1], [dnl +pe.sps:1.6: error: PERMISSIONS: Syntax error at `|': expecting STRING. +]) +AT_CLEANUP