aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2005-12-09 17:09:00 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2005-12-09 17:09:00 +0000
commit49d0ac4472a0e908473e38fdb24fa86758a18e30 (patch)
tree1ffa3c53edfa7234948b70e357f56d5cabe7bca2
parent832bcfef55e160998fd1b46e3bf6cbbdeb23df15 (diff)
downloadpostgresql-49d0ac4472a0e908473e38fdb24fa86758a18e30.tar.gz
postgresql-49d0ac4472a0e908473e38fdb24fa86758a18e30.zip
Fix core dump in error path of plpgsql_parse_tripwordtype. Somebody
introduced a copy-and-pasteo while trying to simplify the code.
-rw-r--r--src/pl/plpgsql/src/pl_comp.c20
1 files changed, 10 insertions, 10 deletions
diff --git a/src/pl/plpgsql/src/pl_comp.c b/src/pl/plpgsql/src/pl_comp.c
index 18292a367d8..10b5a200a89 100644
--- a/src/pl/plpgsql/src/pl_comp.c
+++ b/src/pl/plpgsql/src/pl_comp.c
@@ -3,7 +3,7 @@
* procedural language
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/pl/plpgsql/src/pl_comp.c,v 1.94.2.1 2005/11/22 18:23:30 momjian Exp $
+ * $PostgreSQL: pgsql/src/pl/plpgsql/src/pl_comp.c,v 1.94.2.2 2005/12/09 17:09:00 tgl Exp $
*
* This software is copyrighted by Jan Wieck - Hamburg.
*
@@ -1314,11 +1314,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 &&
@@ -1326,13 +1326,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);
@@ -1371,10 +1371,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;
@@ -1419,11 +1419,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 &&
@@ -1431,14 +1431,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);
@@ -1457,7 +1457,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);