diff --git a/contrib/ltree/ltree_io.c b/contrib/ltree/ltree_io.c
index 62c033cc5df61a63fc078a7e67503571d7a501ad..99803059f0fade9749dc652eb2d7ecacc0e450cf 100644
--- a/contrib/ltree/ltree_io.c
+++ b/contrib/ltree/ltree_io.c
@@ -498,22 +498,21 @@ lquery_out(PG_FUNCTION_ARGS)
 			   *ptr;
 	int			i,
 				j,
-				totallen = 0;
+				totallen = 1;
 	lquery_level *curqlevel;
 	lquery_variant *curtlevel;
 
 	curqlevel = LQUERY_FIRST(in);
 	for (i = 0; i < in->numlevel; i++)
 	{
+		totallen++;
 		if (curqlevel->numvar)
-			totallen = (curqlevel->numvar * 4) + 1 + curqlevel->totallen;
+			totallen += 1 + (curqlevel->numvar * 4) + curqlevel->totallen;
 		else
-			totallen = 2 * 11 + 4;
-		totallen++;
+			totallen += 2 * 11 + 4;
 		curqlevel = LQL_NEXT(curqlevel);
 	}
 
-
 	ptr = buf = (char *) palloc(totallen);
 	curqlevel = LQUERY_FIRST(in);
 	for (i = 0; i < in->numlevel; i++)