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;
                }