diff --git a/src/backend/executor/execTuples.c b/src/backend/executor/execTuples.c
index 06ac253ea0..798a7e8518 100644
--- a/src/backend/executor/execTuples.c
+++ b/src/backend/executor/execTuples.c
@@ -2016,6 +2016,12 @@ ExecTypeFromExprList(List *exprList)
 									cur_resno,
 									exprCollation(e));
 		cur_resno++;
+
+		/* prevent overflow */
+		if (cur_resno >= MaxAttrNumber)
+			ereport(ERROR,
+					(errcode(ERRCODE_TOO_MANY_COLUMNS),
+					 errmsg("too many attributes")));
 	}
 
 	return typeInfo;
