Skip to content

Commit bcf23ba

Browse files
committed
Fix previous patch so it also works if not USE_SSL (mea culpa).
On balance, the need to cover this case changes my mind in favor of pushing all error-message generation duties into the two fe-secure.c routines. So do it that way.
1 parent fee476d commit bcf23ba

File tree

2 files changed

+170
-98
lines changed

2 files changed

+170
-98
lines changed

src/interfaces/libpq/fe-misc.c

Lines changed: 12 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -578,7 +578,6 @@ pqReadData(PGconn *conn)
578578
{
579579
int someread = 0;
580580
int nread;
581-
char sebuf[256];
582581

583582
if (conn->sock < 0)
584583
{
@@ -647,11 +646,7 @@ pqReadData(PGconn *conn)
647646
if (SOCK_ERRNO == ECONNRESET)
648647
goto definitelyFailed;
649648
#endif
650-
/* in SSL mode, pqsecure_read set the error message */
651-
if (conn->ssl == NULL)
652-
printfPQExpBuffer(&conn->errorMessage,
653-
libpq_gettext("could not receive data from server: %s\n"),
654-
SOCK_STRERROR(SOCK_ERRNO, sebuf, sizeof(sebuf)));
649+
/* pqsecure_read set the error message for us */
655650
return -1;
656651
}
657652
if (nread > 0)
@@ -711,6 +706,11 @@ pqReadData(PGconn *conn)
711706
/* ready for read */
712707
break;
713708
default:
709+
printfPQExpBuffer(&conn->errorMessage,
710+
libpq_gettext(
711+
"server closed the connection unexpectedly\n"
712+
"\tThis probably means the server terminated abnormally\n"
713+
"\tbefore or while processing the request.\n"));
714714
goto definitelyFailed;
715715
}
716716

@@ -739,11 +739,7 @@ pqReadData(PGconn *conn)
739739
if (SOCK_ERRNO == ECONNRESET)
740740
goto definitelyFailed;
741741
#endif
742-
/* in SSL mode, pqsecure_read set the error message */
743-
if (conn->ssl == NULL)
744-
printfPQExpBuffer(&conn->errorMessage,
745-
libpq_gettext("could not receive data from server: %s\n"),
746-
SOCK_STRERROR(SOCK_ERRNO, sebuf, sizeof(sebuf)));
742+
/* pqsecure_read set the error message for us */
747743
return -1;
748744
}
749745
if (nread > 0)
@@ -754,16 +750,10 @@ pqReadData(PGconn *conn)
754750

755751
/*
756752
* OK, we are getting a zero read even though select() says ready. This
757-
* means the connection has been closed. Cope.
753+
* means the connection has been closed. Cope. Note that errorMessage
754+
* has been set already.
758755
*/
759756
definitelyFailed:
760-
/* in SSL mode, pqsecure_read set the error message */
761-
if (conn->ssl == NULL)
762-
printfPQExpBuffer(&conn->errorMessage,
763-
libpq_gettext(
764-
"server closed the connection unexpectedly\n"
765-
"\tThis probably means the server terminated abnormally\n"
766-
"\tbefore or while processing the request.\n"));
767757
conn->status = CONNECTION_BAD; /* No more connection to backend */
768758
pqsecure_close(conn);
769759
closesocket(conn->sock);
@@ -799,7 +789,6 @@ pqSendSome(PGconn *conn, int len)
799789
while (len > 0)
800790
{
801791
int sent;
802-
char sebuf[256];
803792

804793
#ifndef WIN32
805794
sent = pqsecure_write(conn, ptr, len);
@@ -815,11 +804,7 @@ pqSendSome(PGconn *conn, int len)
815804

816805
if (sent < 0)
817806
{
818-
/*
819-
* Anything except EAGAIN/EWOULDBLOCK/EINTR is trouble. If it's
820-
* EPIPE or ECONNRESET, assume we've lost the backend connection
821-
* permanently.
822-
*/
807+
/* Anything except EAGAIN/EWOULDBLOCK/EINTR is trouble */
823808
switch (SOCK_ERRNO)
824809
{
825810
#ifdef EAGAIN
@@ -833,17 +818,8 @@ pqSendSome(PGconn *conn, int len)
833818
case EINTR:
834819
continue;
835820

836-
case EPIPE:
837-
#ifdef ECONNRESET
838-
case ECONNRESET:
839-
#endif
840-
/* in SSL mode, pqsecure_write set the error message */
841-
if (conn->ssl == NULL)
842-
printfPQExpBuffer(&conn->errorMessage,
843-
libpq_gettext(
844-
"server closed the connection unexpectedly\n"
845-
"\tThis probably means the server terminated abnormally\n"
846-
"\tbefore or while processing the request.\n"));
821+
default:
822+
/* pqsecure_write set the error message for us */
847823

848824
/*
849825
* We used to close the socket here, but that's a bad idea
@@ -855,16 +831,6 @@ pqSendSome(PGconn *conn, int len)
855831
*/
856832
conn->outCount = 0;
857833
return -1;
858-
859-
default:
860-
/* in SSL mode, pqsecure_write set the error message */
861-
if (conn->ssl == NULL)
862-
printfPQExpBuffer(&conn->errorMessage,
863-
libpq_gettext("could not send data to server: %s\n"),
864-
SOCK_STRERROR(SOCK_ERRNO, sebuf, sizeof(sebuf)));
865-
/* We don't assume it's a fatal error... */
866-
conn->outCount = 0;
867-
return -1;
868834
}
869835
}
870836
else

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy