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
}
| '}'
{
- 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);
}
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)
{