Fix one-byte buffer overrun in PQprintTuples().
authorTom Lane
Mon, 21 Jan 2013 04:44:01 +0000 (23:44 -0500)
committerTom Lane
Mon, 21 Jan 2013 04:44:01 +0000 (23:44 -0500)
This bug goes back to the original Postgres95 sources.  Its significance
to modern PG versions is marginal, since we have not used PQprintTuples()
internally in a very long time, and it doesn't seem to have ever been
documented either.  Still, it *is* exposed to client apps, so somebody
out there might possibly be using it.

Xi Wang

src/interfaces/libpq/fe-print.c

index 31466b18b6b42685056528f155d684017d1509c0..d1fe3ee22cd6f12c7d40d514b447dbecba7c61ae 100644 (file)
@@ -681,7 +681,6 @@ PQprintTuples(const PGresult *res,
    int         i,
                j;
    char        formatString[80];
-
    char       *tborder = NULL;
 
    nFields = PQnfields(res);
@@ -700,15 +699,15 @@ PQprintTuples(const PGresult *res,
            int         width;
 
            width = nFields * 14;
-           tborder = malloc(width + 1);
+           tborder = (char *) malloc(width + 1);
            if (!tborder)
            {
                fprintf(stderr, libpq_gettext("out of memory\n"));
                exit(1);
            }
-           for (i = 0; i <= width; i++)
+           for (i = 0; i < width; i++)
                tborder[i] = '-';
-           tborder[i] = '\0';
+           tborder[width] = '\0';
            fprintf(fout, "%s\n", tborder);
        }