From 6830cc09847cfe17ae59177e7f81b67312496108 Mon Sep 17 00:00:00 2001 From: Stephane Martin Date: Sun, 10 Jan 2021 01:05:56 +0100 Subject: [PATCH] Fix: also consider \r, \f, \t as whitespace (jackc/pgtype#86) --- array.go | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/array.go b/array.go index 6063c9e6..4e22166e 100644 --- a/array.go +++ b/array.go @@ -347,8 +347,13 @@ func quoteArrayElement(src string) string { return `"` + quoteArrayReplacer.Replace(src) + `"` } +func isSpace(ch byte) bool { + // see https://github.com/postgres/postgres/blob/REL_12_STABLE/src/backend/parser/scansup.c#L224 + return ch == ' ' || ch == '\t' || ch == '\n' || ch == '\r' || ch == '\f' +} + func QuoteArrayElementIfNeeded(src string) string { - if src == "" || (len(src) == 4 && strings.ToLower(src) == "null") || src[0] == ' ' || src[0] == '\n' || src[len(src)-1] == ' ' || src[len(src)-1] == '\n' || strings.ContainsAny(src, `{},"\`) { + if src == "" || (len(src) == 4 && strings.ToLower(src) == "null") || isSpace(src[0]) || isSpace(src[len(src)-1]) || strings.ContainsAny(src, `{},"\`) { return quoteArrayElement(src) } return src