postgres.git / summary / log / commit / refs

commit    03010366b6fb61aac0998f234478cc745ff97b0c
Author:   Stephen Frost <sfrost@snowman.net>
Date:     Mon Jul 15 14:42:27 2013 +0000
First released in: 9.4.0, 9.2.5, 9.3.0

    Correct off-by-one when reading from pipe
    
    In pg_basebackup.c:reached_end_position(), we're reading from an
    internal pipe with our own background process but we're possibly
    reading more bytes than will actually fit into our buffer due to
    an off-by-one error.  As we're reading from an internal pipe
    there's no real risk here, but it's good form to not depend on
    such convenient arrangements.
    
    Bug spotted by the Coverity scanner.
    
    Back-patch to 9.2 where this showed up.


src/bin/pg_basebackup/pg_basebackup.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bin/pg_basebackup/pg_basebackup.c b/src/bin/pg_basebackup/pg_basebackup.c index 56657a42c40..a1e12a8aaa3 100644 --- a/src/bin/pg_basebackup/pg_basebackup.c +++ b/src/bin/pg_basebackup/pg_basebackup.c @@ -174,7 +174,7 @@ reached_end_position(XLogRecPtr segendpos, uint32 timeline, lo; MemSet(xlogend, 0, sizeof(xlogend)); - r = read(bgpipe[0], xlogend, sizeof(xlogend)); + r = read(bgpipe[0], xlogend, sizeof(xlogend)-1); if (r < 0) { fprintf(stderr, _("%s: could not read from ready pipe: %s\n"), [parent: 3355443fb188]