From bc7ca55b45576620a03de643e9a9303f25216823 Mon Sep 17 00:00:00 2001 From: Laurent Debacker Date: Tue, 7 Apr 2015 22:26:45 +0200 Subject: [PATCH] Fix decoding of ARRAY[]::text[] The original version could not decode ARRAY[]::text[]. When an empty array was detected, decode1dArrayHeader was not reading enough values off the socket, and subsequent values were incorrectly read. --- values.go | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/values.go b/values.go index 0dc5b641..1f0647b5 100644 --- a/values.go +++ b/values.go @@ -1102,16 +1102,17 @@ func encodeTimestamp(w *WriteBuf, value interface{}) error { func decode1dArrayHeader(vr *ValueReader) (length int32, err error) { numDims := vr.ReadInt32() - if numDims == 0 { - return 0, nil - } - if numDims != 1 { + if numDims > 1 { return 0, ProtocolError(fmt.Sprintf("Expected array to have 0 or 1 dimension, but it had %v", numDims)) } vr.ReadInt32() // 0 if no nulls / 1 if there is one or more nulls -- but we don't care vr.ReadInt32() // element oid + if numDims == 0 { + return 0, nil + } + length = vr.ReadInt32() idxFirstElem := vr.ReadInt32()