From 325feaef7f46e609973360b4102c1acfc4924d72 Mon Sep 17 00:00:00 2001 From: Andrew Dunstan Date: Mon, 2 Apr 2007 22:14:17 +0000 Subject: Check length of enum literals on definition and input to make sure they will fit in a name field and not cause syscache errors. --- src/backend/utils/adt/enum.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) (limited to 'src/backend/utils/adt/enum.c') diff --git a/src/backend/utils/adt/enum.c b/src/backend/utils/adt/enum.c index 288894ec3fb..635d232912e 100644 --- a/src/backend/utils/adt/enum.c +++ b/src/backend/utils/adt/enum.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/utils/adt/enum.c,v 1.1 2007/04/02 03:49:39 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/utils/adt/enum.c,v 1.2 2007/04/02 22:14:17 adunstan Exp $ * *------------------------------------------------------------------------- */ @@ -45,6 +45,15 @@ cstring_enum(char *name, Oid enumtypoid) HeapTuple tup; Oid enumoid; + /* must check length to prevent Assert failure within SearchSysCache */ + + if (strlen(name) >= NAMEDATALEN) + ereport(ERROR, + (errcode(ERRCODE_INVALID_TEXT_REPRESENTATION), + errmsg("invalid input value for enum %s: \"%s\"", + format_type_be(enumtypoid), + name))); + tup = SearchSysCache(ENUMTYPOIDNAME, ObjectIdGetDatum(enumtypoid), CStringGetDatum(name), -- cgit v1.2.3