Cope with indicator arrays that do not have the correct length.
authorMichael Meskes
Sat, 13 Jan 2018 13:56:49 +0000 (14:56 +0100)
committerMichael Meskes
Mon, 15 Jan 2018 09:01:15 +0000 (10:01 +0100)
Patch by: "Rader, David" 

src/interfaces/ecpg/preproc/type.c

index 0b84b8d3c476aa35413b66fb8f80a734a747a705..3a5993836acf56623b4bebcfa63e86adfd1e5bfc 100644 (file)
@@ -609,7 +609,17 @@ ECPGdump_a_struct(FILE *o, const char *name, const char *ind_name, char *arrsiz,
                        prefix, ind_prefix, arrsiz, 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);