Fix unportable use of isprint().
authorTom Lane <tgl@sss.pgh.pa.us>
Wed, 31 Mar 2021 21:14:16 +0000 (17:14 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Wed, 31 Mar 2021 21:14:16 +0000 (17:14 -0400)
We must cast the arguments of <ctype.h> functions to unsigned
char to avoid problems where char is signed.

Speaking of which, considering that this *is* a <ctype.h> function,
it's rather remarkable that we aren't seeing more complaints about
not having included that header.

Per buildfarm.

src/interfaces/libpq/fe-trace.c

index 5faeee745190575c8542414a68080d8785022738..ca59c183182bfd6e087dff502fcf409d44e6935a 100644 (file)
@@ -14,6 +14,7 @@
 
 #include "postgres_fe.h"
 
+#include <ctype.h>
 #include <limits.h>
 #include <time.h>
 
@@ -28,6 +29,7 @@
 #include "libpq-int.h"
 #include "port/pg_bswap.h"
 
+
 /* Enable tracing */
 void
 PQtrace(PGconn *conn, FILE *debug_port)
@@ -102,7 +104,7 @@ pqTraceOutputByte1(FILE *pfdebug, const char *data, int *cursor)
         * Show non-printable data in hex format, including the terminating \0
         * that completes ErrorResponse and NoticeResponse messages.
         */
-       if (!isprint(*v))
+       if (!isprint((unsigned char) *v))
                fprintf(pfdebug, " \\x%02x", *v);
        else
                fprintf(pfdebug, " %c", *v);
@@ -186,7 +188,7 @@ pqTraceOutputNchar(FILE *pfdebug, int len, const char *data, int *cursor)
 
        for (next = i = 0; i < len; ++i)
        {
-               if (isprint(v[i]))
+               if (isprint((unsigned char) v[i]))
                        continue;
                else
                {