aboutsummaryrefslogtreecommitdiff
path: root/src/backend
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2022-01-24 12:09:46 -0500
committerTom Lane <tgl@sss.pgh.pa.us>2022-01-24 12:09:46 -0500
commita8ce5c8d788823f9bb79ab5760a396bfe2116529 (patch)
tree8746ee0e1cf370a48e90b3c591e712cf88673718 /src/backend
parent68cc72d4d55cd1d45c24f0f3fccc1f445b6ad0da (diff)
downloadpostgresql-a8ce5c8d788823f9bb79ab5760a396bfe2116529.tar.gz
postgresql-a8ce5c8d788823f9bb79ab5760a396bfe2116529.zip
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
Diffstat (limited to 'src/backend')
-rw-r--r--src/backend/replication/repl_scanner.l3
1 files changed, 3 insertions, 0 deletions
diff --git a/src/backend/replication/repl_scanner.l b/src/backend/replication/repl_scanner.l
index 380faeb5f6e..d892c16fb00 100644
--- a/src/backend/replication/repl_scanner.l
+++ b/src/backend/replication/repl_scanner.l
@@ -243,6 +243,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