]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
Avoid throwing away the error message in syncrep_yyerror.
authorRobert Haas <rhaas@postgresql.org>
Thu, 24 Jul 2025 17:30:43 +0000 (13:30 -0400)
committerRobert Haas <rhaas@postgresql.org>
Mon, 28 Jul 2025 14:35:05 +0000 (10:35 -0400)
Commit 473a575e05979b4dbb28b3f2544f4ec8f184ce65 purported to make this
function stash the error message in *syncrep_parse_result_p, but
it didn't actually.

As a result, an attempt to set synchronous_standby_names to any value
that does not parse resulted in a generic "parser failed." message
rather than anything more specific. This fixes that.

Discussion: http://postgr.es/m/CA+TgmoYF9wPNZ-Q_EMfib_espgHycY-eX__6Tzo2GpYpVXqCdQ@mail.gmail.com
Backpatch-through: 18

src/backend/replication/syncrep_scanner.l

index 7dec1f869c74542db727a7c1d623abc8d5c2e4b9..02004d621e73daac5b67c09f66fb992766831469 100644 (file)
@@ -157,17 +157,16 @@ syncrep_yyerror(SyncRepConfigData **syncrep_parse_result_p, char **syncrep_parse
 {
        struct yyguts_t *yyg = (struct yyguts_t *) yyscanner;   /* needed for yytext
                                                                                                                         * macro */
-       char *syncrep_parse_error_msg = *syncrep_parse_error_msg_p;
 
        /* report only the first error in a parse operation */
-       if (syncrep_parse_error_msg)
+       if (*syncrep_parse_error_msg_p)
                return;
        if (yytext[0])
-               syncrep_parse_error_msg = psprintf("%s at or near \"%s\"",
-                                                                                  message, yytext);
+               *syncrep_parse_error_msg_p = psprintf("%s at or near \"%s\"",
+                                                                                         message, yytext);
        else
-               syncrep_parse_error_msg = psprintf("%s at end of input",
-                                                                                  message);
+               *syncrep_parse_error_msg_p = psprintf("%s at end of input",
+                                                                                         message);
 }
 
 void