• Tom Lane's avatar
    Teach libpq to detect integer overflow in the row count of a PGresult. · 2e70d6b5
    Tom Lane authored
    Adding more than 1 billion rows to a PGresult would overflow its ntups and
    tupArrSize fields, leading to client crashes.  It'd be desirable to use
    wider fields on 64-bit machines, but because all of libpq's external APIs
    use plain "int" for row counters, that's going to be hard to accomplish
    without an ABI break.  Given the lack of complaints so far, and the general
    pain that would be involved in using such huge PGresults, let's settle for
    just preventing the overflow and reporting a useful error message if it
    does happen.  Also, for a couple more lines of code we can increase the
    threshold of trouble from INT_MAX/2 to INT_MAX rows.
    
    To do that, refactor pqAddTuple() to allow returning an error message that
    replaces the default assumption that it failed because of out-of-memory.
    
    Along the way, fix PQsetvalue() so that it reports all failures via
    pqInternalNotice().  It already did so in the case of bad field number,
    but neglected to report anything for other error causes.
    
    Because of the potential for crashes, this seems like a back-patchable
    bug fix, despite the lack of field reports.
    
    Michael Paquier, per a complaint from Igor Korot.
    
    Discussion: https://postgr.es/m/CA+FnnTxyLWyjY1goewmJNxC==HQCCF4fKkoCTa9qR36oRAHDPw@mail.gmail.com
    2e70d6b5
fe-exec.c 91.8 KB