diff --git a/src/backend/parser/scan.l b/src/backend/parser/scan.l
index 998349d7421a49bd692f7c8a206525055da52eab..acd92698057928aeccfd68b4461c35981b31f0a0 100644
--- a/src/backend/parser/scan.l
+++ b/src/backend/parser/scan.l
@@ -1435,6 +1435,13 @@ litbuf_udeescape(unsigned char escape, core_yyscan_t yyscanner)
 		}
 	}
 
+	/* unfinished surrogate pair? */
+	if (pair_first)
+	{
+		ADVANCE_YYLLOC(in - litbuf + 3);				/* 3 for U&" */
+		yyerror("invalid Unicode surrogate pair");
+	}
+
 	*out = '\0';
 
 	/*