From daf658982889451e6cdb9763482a03656407ae3e Mon Sep 17 00:00:00 2001
From: Tom Lane <tgl@sss.pgh.pa.us>
Date: Mon, 24 Jan 2022 12:09:46 -0500
Subject: [PATCH] Remember to reset yy_start state when firing up
 repl_scanner.l.

Without this, we get odd behavior when the previous cycle of
lexing exited in a non-default exclusive state.  Every other
copy of this code is aware that it has to do BEGIN(INITIAL),
but repl_scanner.l did not get that memo.

The real-world impact of this is probably limited, since most
replication clients would abandon their connection after getting
a syntax error.  Still, it's a bug.

This mistake is old, so back-patch to all supported branches.

Discussion: https://postgr.es/m/1874781.1643035952@sss.pgh.pa.us
---
 src/backend/replication/repl_scanner.l | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/src/backend/replication/repl_scanner.l b/src/backend/replication/repl_scanner.l
index 62bb5288c01..271713af7d3 100644
--- a/src/backend/replication/repl_scanner.l
+++ b/src/backend/replication/repl_scanner.l
@@ -239,6 +239,9 @@ replication_scanner_init(const char *str)
 	memcpy(scanbuf, str, slen);
 	scanbuf[slen] = scanbuf[slen + 1] = YY_END_OF_BUFFER_CHAR;
 	scanbufhandle = yy_scan_buffer(scanbuf, slen + 2);
+
+	/* Make sure we start in proper state */
+	BEGIN(INITIAL);
 }
 
 void
-- 
2.39.5