diff --git a/src/backend/utils/adt/datetime.c b/src/backend/utils/adt/datetime.c
index d827d7d1463..12211c8273d 100644
--- a/src/backend/utils/adt/datetime.c
+++ b/src/backend/utils/adt/datetime.c
@@ -2176,9 +2176,12 @@ DecodeDate(char *str, int fmask, int *tmask, bool *is2digits,
 	while (*str != '\0' && nf < MAXDATEFIELDS)
 	{
 		/* skip field separators */
-		while (!isalnum((unsigned char) *str))
+		while (*str != '\0' && !isalnum((unsigned char) *str))
 			str++;
 
+		if (*str == '\0')
+			return DTERR_BAD_FORMAT;		/* end of string after separator */
+
 		field[nf] = str;
 		if (isdigit((unsigned char) *str))
 		{