diff --git a/CHANGELOG.md b/CHANGELOG.md index 524c89a..918feed 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ ## 0.4.4 (unreleased) - Improved error message for malformed vector literal +- Fixed consecutive delimiters with text representation ## 0.4.3 (2023-06-10) diff --git a/src/vector.c b/src/vector.c index ddcd5e2..6235d6b 100644 --- a/src/vector.c +++ b/src/vector.c @@ -225,6 +225,15 @@ vector_in(PG_FUNCTION_ARGS) errmsg("malformed vector literal: \"%s\"", lit), errdetail("Junk after closing right brace."))); + /* Ensure no consecutive delimiters since strtok skips */ + for (pt = lit + 1; *pt != '\0'; pt++) + { + if (pt[-1] == ',' && *pt == ',') + ereport(ERROR, + (errcode(ERRCODE_INVALID_TEXT_REPRESENTATION), + errmsg("malformed vector literal: \"%s\"", lit))); + } + if (dim < 1) ereport(ERROR, (errcode(ERRCODE_DATA_EXCEPTION), diff --git a/test/expected/input.out b/test/expected/input.out index 3925447..5ee1c8f 100644 --- a/test/expected/input.out +++ b/test/expected/input.out @@ -65,6 +65,10 @@ SELECT '[1,]'::vector; ERROR: invalid input syntax for type vector: "[1,]" LINE 1: SELECT '[1,]'::vector; ^ +SELECT '[1,,3]'::vector; +ERROR: malformed vector literal: "[1,,3]" +LINE 1: SELECT '[1,,3]'::vector; + ^ SELECT '[1,2,3]'::vector(2); ERROR: expected 2 dimensions, not 3 SELECT unnest('{"[1,2,3]", "[4,5,6]"}'::vector[]); diff --git a/test/sql/input.sql b/test/sql/input.sql index 7d74bc9..2aad918 100644 --- a/test/sql/input.sql +++ b/test/sql/input.sql @@ -12,6 +12,7 @@ SELECT '[1,2,3]9'::vector; SELECT '1,2,3'::vector; SELECT '[]'::vector; SELECT '[1,]'::vector; +SELECT '[1,,3]'::vector; SELECT '[1,2,3]'::vector(2); SELECT unnest('{"[1,2,3]", "[4,5,6]"}'::vector[]);