]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
Avoid extra newline in errors received in FE protocol version 2.
authorHeikki Linnakangas <heikki.linnakangas@iki.fi>
Thu, 4 Mar 2021 08:56:33 +0000 (10:56 +0200)
committerHeikki Linnakangas <heikki.linnakangas@iki.fi>
Thu, 4 Mar 2021 08:56:33 +0000 (10:56 +0200)
Contrary to what the comment said, the postmaster does in fact end all
its messages in a newline, since server version 7.2. Be tidy and don't
add an extra newline if the error message already has one.

Discussion: https://www.postgresql.org/message-id/CAFBsxsEdgMXc%2BtGfEy9Y41i%3D5pMMjKeH8t8vSAypR3ZnAoQnHg%40mail.gmail.com

src/interfaces/libpq/fe-connect.c

index c16a7bd9f22e665b62bee397530c063f5c27c7c9..f83af03d0a7930da266cc1f49195f5e4176c877f 100644 (file)
@@ -3277,10 +3277,15 @@ keep_going:                                             /* We will come back to here until there is
                                        conn->inStart = conn->inCursor;
 
                                        /*
-                                        * The postmaster typically won't end its message with a
-                                        * newline, so add one to conform to libpq conventions.
+                                        * Before 7.2, the postmaster didn't always end its
+                                        * messages with a newline, so add one if needed to
+                                        * conform to libpq conventions.
                                         */
-                                       appendPQExpBufferChar(&conn->errorMessage, '\n');
+                                       if (conn->errorMessage.len == 0 ||
+                                               conn->errorMessage.data[conn->errorMessage.len - 1] != '\n')
+                                       {
+                                               appendPQExpBufferChar(&conn->errorMessage, '\n');
+                                       }
 
                                        goto error_return;
                                }