From 06c3e68befd608ffa4edcc8883478881bc6fa5b6 Mon Sep 17 00:00:00 2001 From: Andrew Kane Date: Mon, 12 Jun 2023 01:09:40 -0700 Subject: [PATCH] Fixed segmentation fault with text representation --- CHANGELOG.md | 1 + src/vector.c | 2 +- test/expected/input.out | 10 ++++++++++ test/sql/input.sql | 2 ++ 4 files changed, 14 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 918feed..3933164 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ ## 0.4.4 (unreleased) - Improved error message for malformed vector literal +- Fixed segmentation fault with text representation - Fixed consecutive delimiters with text representation ## 0.4.3 (2023-06-10) diff --git a/src/vector.c b/src/vector.c index 4adb399..394a478 100644 --- a/src/vector.c +++ b/src/vector.c @@ -194,7 +194,7 @@ vector_in(PG_FUNCTION_ARGS) pt = strtok(NULL, ","); } - if (*stringEnd != ']') + if (stringEnd == NULL || *stringEnd != ']') ereport(ERROR, (errcode(ERRCODE_INVALID_TEXT_REPRESENTATION), errmsg("malformed vector literal: \"%s\"", lit), diff --git a/test/expected/input.out b/test/expected/input.out index a4d61c4..19ef74d 100644 --- a/test/expected/input.out +++ b/test/expected/input.out @@ -81,6 +81,16 @@ ERROR: malformed vector literal: "1,2,3" LINE 1: SELECT '1,2,3'::vector; ^ DETAIL: Vector contents must start with "[". +SELECT '['::vector; +ERROR: malformed vector literal: "[" +LINE 1: SELECT '['::vector; + ^ +DETAIL: Unexpected end of input. +SELECT '[,'::vector; +ERROR: malformed vector literal: "[," +LINE 1: SELECT '[,'::vector; + ^ +DETAIL: Unexpected end of input. SELECT '[]'::vector; ERROR: vector must have at least 1 dimension LINE 1: SELECT '[]'::vector; diff --git a/test/sql/input.sql b/test/sql/input.sql index 503c919..a4ad08d 100644 --- a/test/sql/input.sql +++ b/test/sql/input.sql @@ -14,6 +14,8 @@ SELECT '[4e38,1]'::vector; SELECT '[1,2,3'::vector; SELECT '[1,2,3]9'::vector; SELECT '1,2,3'::vector; +SELECT '['::vector; +SELECT '[,'::vector; SELECT '[]'::vector; SELECT '[1,]'::vector; SELECT '[1a]'::vector;