diff --git a/src/backend/utils/adt/arrayfuncs.c b/src/backend/utils/adt/arrayfuncs.c
index 311d0c22f065ccc270f60a1c9cbea6620528ce4d..91df1842427f995d2a75c3167a284f28494a24a3 100644
--- a/src/backend/utils/adt/arrayfuncs.c
+++ b/src/backend/utils/adt/arrayfuncs.c
@@ -425,8 +425,8 @@ ArrayCount(const char *str, int *dim, char typdelim)
 
 	for (i = 0; i < MAXDIM; ++i)
 	{
-		temp[i] = dim[i] = 0;
-		nelems_last[i] = nelems[i] = 1;
+		temp[i] = dim[i] = nelems_last[i] = 0;
+		nelems[i] = 1;
 	}
 
 	ptr = str;
@@ -540,8 +540,8 @@ ArrayCount(const char *str, int *dim, char typdelim)
 							errmsg("malformed array literal: \"%s\"", str)));
 						nest_level--;
 
-						if ((nelems_last[nest_level] != 1) &&
-							(nelems[nest_level] != nelems_last[nest_level]))
+						if (nelems_last[nest_level] != 0 &&
+							nelems[nest_level] != nelems_last[nest_level])
 							ereport(ERROR,
 							   (errcode(ERRCODE_INVALID_TEXT_REPRESENTATION),
 								errmsg("multidimensional arrays must have "
diff --git a/src/test/regress/expected/arrays.out b/src/test/regress/expected/arrays.out
index e1b9d7f0a841ec3014adbe7930dc56d912603965..6dce5c9301b47f37fbc400683a5f9c4f6662f9a3 100644
--- a/src/test/regress/expected/arrays.out
+++ b/src/test/regress/expected/arrays.out
@@ -1491,7 +1491,7 @@ select cardinality('{{1,2},{3,4},{5,6}}'::int[]);
            6
 (1 row)
 
-select cardinality('{{{1}},{{2,3},{3,4}}}'::int[]);
+select cardinality('{{{1,9},{5,6}},{{2,3},{3,4}}}'::int[]);
  cardinality 
 -------------
            8
diff --git a/src/test/regress/sql/arrays.sql b/src/test/regress/sql/arrays.sql
index 64630d9ab7817ab2bb1923b6b815867a793dafd9..92af172dfc4ba599ae71671726440c3fec3bfb71 100644
--- a/src/test/regress/sql/arrays.sql
+++ b/src/test/regress/sql/arrays.sql
@@ -425,7 +425,7 @@ select cardinality(array[1,2,3]);
 select cardinality('[2:4]={5,6,7}'::int[]);
 select cardinality('{{1,2}}'::int[]);
 select cardinality('{{1,2},{3,4},{5,6}}'::int[]);
-select cardinality('{{{1}},{{2,3},{3,4}}}'::int[]);
+select cardinality('{{{1,9},{5,6}},{{2,3},{3,4}}}'::int[]);
 
 select array_agg(unique1) from (select unique1 from tenk1 where unique1 < 15 order by unique1) ss;
 select array_agg(ten) from (select ten from tenk1 where unique1 < 15 order by unique1) ss;