Cope with indicator arrays that do not have the correct length.
authorMichael Meskes <meskes@postgresql.org>
Sat, 13 Jan 2018 13:56:49 +0000 (14:56 +0100)
committerMichael Meskes <meskes@postgresql.org>
Sat, 13 Jan 2018 13:57:49 +0000 (14:57 +0100)
Patch by: "Rader, David" <davidr@openscg.com>

src/interfaces/ecpg/preproc/type.c

index 4abbf93d191c892ad42ae26e783c255b4ea94c8c..fa1a05c3025787cea1d959aea45090f2b7acbc5c 100644 (file)
@@ -609,7 +609,17 @@ ECPGdump_a_struct(FILE *o, const char *name, const char *ind_name, char *arrsize
                                                prefix, ind_prefix, arrsize, type->struct_sizeof,
                                                (ind_p != NULL) ? ind_type->struct_sizeof : NULL);
                if (ind_p != NULL && ind_p != &struct_no_indicator)
+               {
                        ind_p = ind_p->next;
+                       if (ind_p == NULL && p->next != NULL) {
+                               mmerror(PARSE_ERROR, ET_WARNING, "indicator struct \"%s\" has too few members", ind_name);
+                               ind_p = &struct_no_indicator;
+                       }
+               }
+       }
+
+       if (ind_type != NULL && ind_p != NULL && ind_p != &struct_no_indicator) {
+               mmerror(PARSE_ERROR, ET_WARNING, "indicator struct \"%s\" has too many members", ind_name);
        }
 
        free(pbuf);