diff --git a/src/backend/utils/adt/tsvector_op.c b/src/backend/utils/adt/tsvector_op.c
index 6a01276ca269a17801a3ad80080a1bd1786d1ca6..186b3d337ad9b26cfc30a432e18ea8743be0bebb 100644
--- a/src/backend/utils/adt/tsvector_op.c
+++ b/src/backend/utils/adt/tsvector_op.c
@@ -66,7 +66,7 @@ typedef struct
 #define STATHDRSIZE (offsetof(TSVectorStat, data))
 
 static Datum tsvector_update_trigger(PG_FUNCTION_ARGS, bool config_column);
-static int tsvector_bsearch(TSVector tsin, char *lexin, int lexin_len);
+static int tsvector_bsearch(const TSVector tsv, char *lexeme, int lexeme_len);
 
 /*
  * Order: haspos, len, word, for all positions (pos, weight)
@@ -684,10 +684,12 @@ tsvector_to_array(PG_FUNCTION_ARGS)
 {
 	TSVector			tsin  = PG_GETARG_TSVECTOR(0);
 	WordEntry		   *arrin = ARRPTR(tsin);
-	Datum				elements[tsin->size];
+	Datum				*elements;
 	int					i;
 	ArrayType		   *array;
 
+	elements = palloc(tsin->size * sizeof(Datum));
+
 	for (i = 0; i < tsin->size; i++)
 	{
 		elements[i] = PointerGetDatum(
@@ -696,6 +698,8 @@ tsvector_to_array(PG_FUNCTION_ARGS)
 	}
 
 	array = construct_array(elements, tsin->size, TEXTOID, -1, false, 'i');
+
+	pfree(elements);
 	PG_FREE_IF_COPY(tsin, 0);
 	PG_RETURN_POINTER(array);
 }