Обсуждение: [PATCH] Fix off-by-one in PQprintTuples()

Поиск
Список
Период
Сортировка

[PATCH] Fix off-by-one in PQprintTuples()

От
Xi Wang
Дата:
Don't write past the end of tborder; the size is width + 1.
---src/interfaces/libpq/fe-print.c |    2 +-1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/interfaces/libpq/fe-print.c b/src/interfaces/libpq/fe-print.c
index 076e1cc..7ed489a 100644
--- a/src/interfaces/libpq/fe-print.c
+++ b/src/interfaces/libpq/fe-print.c
@@ -706,7 +706,7 @@ PQprintTuples(const PGresult *res,                fprintf(stderr, libpq_gettext("out of
memory\n"));               abort();            }
 
-            for (i = 0; i <= width; i++)
+            for (i = 0; i < width; i++)                tborder[i] = '-';            tborder[i] = '\0';
fprintf(fout,"%s\n", tborder);
 
-- 
1.7.10.4




Re: [PATCH] Fix off-by-one in PQprintTuples()

От
Stephen Frost
Дата:
* Xi Wang (xi.wang@gmail.com) wrote:
> Don't write past the end of tborder; the size is width + 1.

This whole block of code is woefully without any comments. :(

Strictly speaking, it's this:

tborder[i] = '\0';

Which ends up writing past the end of the buffer (which is allocated as
'width + 1').  Perhaps we should also change that to be:

tborder[width] = '\0';
Thanks,
    Stephen

Re: [PATCH] Fix off-by-one in PQprintTuples()

От
Tom Lane
Дата:
Stephen Frost <sfrost@snowman.net> writes:
> Strictly speaking, it's this:

> tborder[i] = '\0';

> Which ends up writing past the end of the buffer (which is allocated as
> 'width + 1').  Perhaps we should also change that to be:

> tborder[width] = '\0';

Yeah, I like that better too.  Will commit.
        regards, tom lane