ecpg: fix more minor mishandling of bad input in preprocessor.
Don't get confused by an unmatched right brace in the input. (Previously, this led to discarding information about file-level variables and then possibly crashing.) Detect, rather than crash on, an attempt to index into a non-array variable. As before, in the absence of field complaints I'm not too excited about back-patching these. Per valgrind testing by Alexander Lakhin. Discussion: https://postgr.es/m/a239aec2-6c79-5fc9-9272-cea41158a360@gmail.com
This commit is contained in:
parent
98c7c7152d
commit
1fed234f9f
@ -43,12 +43,15 @@ statement: ecpgstart at toplevel_stmt ';'
|
||||
}
|
||||
| '}'
|
||||
{
|
||||
remove_typedefs(braces_open);
|
||||
remove_variables(braces_open--);
|
||||
if (braces_open == 0)
|
||||
if (braces_open > 0)
|
||||
{
|
||||
free(current_function);
|
||||
current_function = NULL;
|
||||
remove_typedefs(braces_open);
|
||||
remove_variables(braces_open);
|
||||
if (--braces_open == 0)
|
||||
{
|
||||
free(current_function);
|
||||
current_function = NULL;
|
||||
}
|
||||
}
|
||||
fputs("}", base_yyout);
|
||||
}
|
||||
|
@ -233,7 +233,8 @@ find_variable(const char *name)
|
||||
p = find_simple(name);
|
||||
if (p == NULL)
|
||||
mmfatal(PARSE_ERROR, "variable \"%s\" is not declared", name);
|
||||
|
||||
if (p->type->type != ECPGt_array)
|
||||
mmfatal(PARSE_ERROR, "variable \"%s\" is not a pointer", name);
|
||||
*next = c;
|
||||
switch (p->type->u.element->type)
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user