diff options
author | Andrew Dunstan <andrew@dunslane.net> | 2007-04-02 22:14:17 +0000 |
---|---|---|
committer | Andrew Dunstan <andrew@dunslane.net> | 2007-04-02 22:14:17 +0000 |
commit | 325feaef7f46e609973360b4102c1acfc4924d72 (patch) | |
tree | 909f79a312e324b14e720eafc31906b82b59c882 /src/backend/utils/adt/enum.c | |
parent | ffb27446ccd76e1b5fb8ec7d0aaa0dffe36d7902 (diff) | |
download | postgresql-325feaef7f46e609973360b4102c1acfc4924d72.tar.gz postgresql-325feaef7f46e609973360b4102c1acfc4924d72.zip |
Check length of enum literals on definition and input to make sure they will fit in a name field and not cause syscache errors.
Diffstat (limited to 'src/backend/utils/adt/enum.c')
-rw-r--r-- | src/backend/utils/adt/enum.c | 11 |
1 files changed, 10 insertions, 1 deletions
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), |