Limit the max string length of enum type to NAMEDATALEN-1(64-1=63)

This commit is contained in:
syj
2020-11-03 15:29:40 +08:00
parent 221307b897
commit cf1183571e
3 changed files with 33 additions and 1 deletions

View File

@ -34,7 +34,7 @@ static int sort_order_cmp(const void* p1, const void* p2);
#define checkEnumLableValue(val) \
do { \
if (NAMEDATALEN < strlen(val) || 0 == strlen(val)) { \
if (NAMEDATALEN - 1 < strlen(val) || 0 == strlen(val)) { \
ereport(ERROR, \
(errcode(ERRCODE_INVALID_NAME), \
errmsg("invalid enum label \"%s\"", val), \

View File

@ -1,4 +1,26 @@
--
-- Check max string length of enum type
--
SELECT char_length('createcshksjdbnskjcbnskjcbnsjcbncbsxkcbscbKHWEIDHBIWFHBSBCISAZDQ');
char_length
-------------
64
(1 row)
CREATE TYPE over_enum AS ENUM('createcshksjdbnskjcbnskjcbnsjcbncbsxkcbscbKHWEIDHBIWFHBSBCISAZDQ');
ERROR: invalid enum label "createcshksjdbnskjcbnskjcbnsjcbncbsxkcbscbKHWEIDHBIWFHBSBCISAZDQ"
DETAIL: Labels must contain 1 to 63 characters.
DROP TYPE IF EXISTS over_enum;
NOTICE: type "over_enum" does not exist, skipping
SELECT char_length('createcshksjdbnskjcbnskjcbnsjcbncbsxkcbscbKHWEIDHBIWFHBSBCISAZD');
char_length
-------------
63
(1 row)
CREATE TYPE max_eunm AS ENUM('createcshksjdbnskjcbnskjcbnsjcbncbsxkcbscbKHWEIDHBIWFHBSBCISAZD');
DROP TYPE IF EXISTS max_eunm;
--
-- Enum tests
--
CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple');

View File

@ -1,3 +1,13 @@
--
-- Check max string length of enum type
--
SELECT char_length('createcshksjdbnskjcbnskjcbnsjcbncbsxkcbscbKHWEIDHBIWFHBSBCISAZDQ');
CREATE TYPE over_enum AS ENUM('createcshksjdbnskjcbnskjcbnsjcbncbsxkcbscbKHWEIDHBIWFHBSBCISAZDQ');
DROP TYPE IF EXISTS over_enum;
SELECT char_length('createcshksjdbnskjcbnskjcbnsjcbncbsxkcbscbKHWEIDHBIWFHBSBCISAZD');
CREATE TYPE max_eunm AS ENUM('createcshksjdbnskjcbnskjcbnsjcbncbsxkcbscbKHWEIDHBIWFHBSBCISAZD');
DROP TYPE IF EXISTS max_eunm;
--
-- Enum tests
--