]> granicus.if.org Git - postgresql/commitdiff
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>
Mon, 15 Jan 2018 09:01:15 +0000 (10:01 +0100)
Patch by: "Rader, David" <davidr@openscg.com>

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);