Fix core dump in error path of plpgsql_parse_tripwordtype. Somebody
authorTom Lane
Fri, 9 Dec 2005 17:08:49 +0000 (17:08 +0000)
committerTom Lane
Fri, 9 Dec 2005 17:08:49 +0000 (17:08 +0000)
introduced a copy-and-pasteo while trying to simplify the code.

src/pl/plpgsql/src/pl_comp.c

index ebe5d6911248dcd82f1a8593ff26f92498cc29e2..b89f975981c7d9a1f7d2275caa676b5bae4a00f3 100644 (file)
@@ -3,7 +3,7 @@
  *           procedural language
  *
  * IDENTIFICATION
- *   $PostgreSQL: pgsql/src/pl/plpgsql/src/pl_comp.c,v 1.96 2005/11/22 18:17:33 momjian Exp $
+ *   $PostgreSQL: pgsql/src/pl/plpgsql/src/pl_comp.c,v 1.97 2005/12/09 17:08:49 tgl Exp $
  *
  *   This software is copyrighted by Jan Wieck - Hamburg.
  *
@@ -1316,11 +1316,11 @@ plpgsql_parse_dblwordtype(char *word)
                              0, 0, 0);
    if (!HeapTupleIsValid(classtup))
        goto done;
+   classStruct = (Form_pg_class) GETSTRUCT(classtup);
 
    /*
     * It must be a relation, sequence, view, or type
     */
-   classStruct = (Form_pg_class) GETSTRUCT(classtup);
    if (classStruct->relkind != RELKIND_RELATION &&
        classStruct->relkind != RELKIND_SEQUENCE &&
        classStruct->relkind != RELKIND_VIEW &&
@@ -1328,13 +1328,13 @@ plpgsql_parse_dblwordtype(char *word)
        goto done;
 
    /*
-    * Fetch the named table field and it's type
+    * Fetch the named table field and its type
     */
    attrtup = SearchSysCacheAttName(classOid, cp[1]);
    if (!HeapTupleIsValid(attrtup))
        goto done;
-
    attrStruct = (Form_pg_attribute) GETSTRUCT(attrtup);
+
    typetup = SearchSysCache(TYPEOID,
                             ObjectIdGetDatum(attrStruct->atttypid),
                             0, 0, 0);
@@ -1373,10 +1373,10 @@ plpgsql_parse_tripwordtype(char *word)
 {
    Oid         classOid;
    HeapTuple   classtup = NULL;
-   Form_pg_class classStruct;
    HeapTuple   attrtup = NULL;
-   Form_pg_attribute attrStruct;
    HeapTuple   typetup = NULL;
+   Form_pg_class classStruct;
+   Form_pg_attribute attrStruct;
    char       *cp[2];
    char       *colname[1];
    int         qualified_att_len;
@@ -1421,11 +1421,11 @@ plpgsql_parse_tripwordtype(char *word)
                              0, 0, 0);
    if (!HeapTupleIsValid(classtup))
        goto done;
+   classStruct = (Form_pg_class) GETSTRUCT(classtup);
 
    /*
     * It must be a relation, sequence, view, or type
     */
-   classStruct = (Form_pg_class) GETSTRUCT(classtup);
    if (classStruct->relkind != RELKIND_RELATION &&
        classStruct->relkind != RELKIND_SEQUENCE &&
        classStruct->relkind != RELKIND_VIEW &&
@@ -1433,14 +1433,14 @@ plpgsql_parse_tripwordtype(char *word)
        goto done;
 
    /*
-    * Fetch the named table field and it's type
+    * Fetch the named table field and its type
     */
    plpgsql_convert_ident(cp[1], colname, 1);
    attrtup = SearchSysCacheAttName(classOid, colname[0]);
    if (!HeapTupleIsValid(attrtup))
        goto done;
-
    attrStruct = (Form_pg_attribute) GETSTRUCT(attrtup);
+
    typetup = SearchSysCache(TYPEOID,
                             ObjectIdGetDatum(attrStruct->atttypid),
                             0, 0, 0);
@@ -1459,7 +1459,7 @@ plpgsql_parse_tripwordtype(char *word)
 done:
    if (HeapTupleIsValid(classtup))
        ReleaseSysCache(classtup);
-   if (HeapTupleIsValid(classtup))
+   if (HeapTupleIsValid(attrtup))
        ReleaseSysCache(attrtup);
    if (HeapTupleIsValid(typetup))
        ReleaseSysCache(typetup);