1. 16 Aug, 2016 6 commits
    • Peter Eisentraut's avatar
      Fix typos · f0fe1c8f
      Peter Eisentraut authored
      From: Alexander Law <exclusion@gmail.com>
      f0fe1c8f
    • Tom Lane's avatar
      Automate the maintenance of SO_MINOR_VERSION for our shared libraries. · a3bce17e
      Tom Lane authored
      Up to now we've manually adjusted these numbers in several different
      Makefiles at the start of each development cycle.  While that's not
      much work, it's easily forgotten, so let's get rid of it by setting
      the SO_MINOR_VERSION values directly from $(MAJORVERSION).
      
      In the case of libpq, this dev cycle's value of SO_MINOR_VERSION happens
      to be "10" anyway, so this switch is transparent.  For ecpg's shared
      libraries, this will result in skipping one or two minor version numbers
      between v9.6 and v10, which seems like no big problem; and it was a bit
      inconsistent that they didn't have equal minor version numbers anyway.
      
      Discussion: <21969.1471287988@sss.pgh.pa.us>
      a3bce17e
    • Robert Haas's avatar
      Fix possible crash due to incorrect allocation context. · 41fb35fa
      Robert Haas authored
      Commit af330393 aimed to reduce
      leakage from tqueue.c, which is good.  Unfortunately, by changing the
      memory context in which all of gather_readnext() executes, it also
      changed the context in which ExecShutdownGatherWorkers executes, which
      is not good, because that function eventually causes a call to
      ExecParallelRetrieveInstrumentation, which proceeds to allocate
      planstate->worker_instrument in a short-lived context, causing a
      crash.
      
      Rushabh Lathia, reviewed by Amit Kapila and by me.
      41fb35fa
    • Tom Lane's avatar
      Remove separate version numbering for ecpg preprocessor. · a7b5573d
      Tom Lane authored
      Once upon a time, it made sense for the ecpg preprocessor to have its
      own version number, because it used a manually-maintained grammar that
      wasn't always in sync with the core grammar.  But those days are
      thankfully long gone, leaving only a maintenance nuisance behind.
      Let's use the PG v10 version numbering changeover as an excuse to get
      rid of the ecpg version number and just have ecpg identify itself by
      PG_VERSION.  From the user's standpoint, ecpg will go from "4.12" in
      the 9.6 branch to "10" in the 10 branch, so there's no failure of
      monotonicity.
      
      Discussion: <1471332659.4410.67.camel@postgresql.org>
      a7b5573d
    • Tom Lane's avatar
      Doc: copy-editing in create_access_method.sgml. · 9b002cc9
      Tom Lane authored
      Improve shaky English grammar.  And markup.
      9b002cc9
    • Tom Lane's avatar
      Doc: remove out-of-date claim that pg_am rows must be inserted by hand. · 8fc571b7
      Tom Lane authored
      Commit 473b9328 added a sentence about that, but neglected to remove
      the adjacent sentence it had falsified.  Per Alexander Law.
      8fc571b7
  2. 15 Aug, 2016 7 commits
  3. 14 Aug, 2016 2 commits
    • Tom Lane's avatar
      Remove bogus dependencies on NUMERIC_MAX_PRECISION. · 9389fbd0
      Tom Lane authored
      NUMERIC_MAX_PRECISION is a purely arbitrary constraint on the precision
      and scale you can write in a numeric typmod.  It might once have had
      something to do with the allowed range of a typmod-less numeric value,
      but at least since 9.1 we've allowed, and documented that we allowed,
      any value that would physically fit in the numeric storage format;
      which is something over 100000 decimal digits, not 1000.
      
      Hence, get rid of numeric_in()'s use of NUMERIC_MAX_PRECISION as a limit
      on the allowed range of the exponent in scientific-format input.  That was
      especially silly in view of the fact that you can enter larger numbers as
      long as you don't use 'e' to do it.  Just constrain the value enough to
      avoid localized overflow, and let make_result be the final arbiter of what
      is too large.  Likewise adjust ecpg's equivalent of this code.
      
      Also get rid of numeric_recv()'s use of NUMERIC_MAX_PRECISION to limit the
      number of base-NBASE digits it would accept.  That created a dump/restore
      hazard for binary COPY without doing anything useful; the wire-format
      limit on number of digits (65535) is about as tight as we would want.
      
      In HEAD, also get rid of pg_size_bytes()'s unnecessary intimacy with what
      the numeric range limit is.  That code doesn't exist in the back branches.
      
      Per gripe from Aravind Kumar.  Back-patch to all supported branches,
      since they all contain the documentation claim about allowed range of
      NUMERIC (cf commit cabf5d84).
      
      Discussion: <2895.1471195721@sss.pgh.pa.us>
      9389fbd0
    • Tom Lane's avatar
      Fix assorted bugs in contrib/bloom. · d6c9e05c
      Tom Lane authored
      In blinsert(), cope with the possibility that a page we pull from the
      notFullPage list is marked BLOOM_DELETED.  This could happen if VACUUM
      recently marked it deleted but hasn't (yet) updated the metapage.
      We can re-use such a page safely, but we *must* reinitialize it so that
      it's no longer marked deleted.
      
      Fix blvacuum() so that it updates the notFullPage list even if it's
      going to update it to empty.  The previous "optimization" of skipping
      the update seems pretty dubious, since it means that the next blinsert()
      will uselessly visit whatever pages we left in the list.
      
      Uniformly treat PageIsNew pages the same as deleted pages.  This should
      allow proper recovery if a crash occurs just after relation extension.
      
      Properly use vacuum_delay_point, not assorted ad-hoc CHECK_FOR_INTERRUPTS
      calls, in the blvacuum() main loop.
      
      Fix broken tuple-counting logic: blvacuum.c counted the number of live
      index tuples over again in each scan, leading to VACUUM VERBOSE reporting
      some multiple of the actual number of surviving index tuples after any
      vacuum that removed any tuples (since they'd be counted in blvacuum, maybe
      more than once, and then again in blvacuumcleanup, without ever zeroing the
      counter).  It's sufficient to count them in blvacuumcleanup.
      
      stats->estimated_count is a boolean, not a counter, and we don't want
      to set it true, so don't add tuple counts to it.
      
      Add a couple of Asserts that we don't overrun available space on a bloom
      page.  I don't think there's any bug there today, but the way the
      FreeBlockNumberArray size calculation is set up is scarily fragile, and
      BloomPageGetFreeSpace isn't much better.  The Asserts should help catch
      any future mistakes.
      
      Per investigation of a report from Jeff Janes.  I think the first item
      above may explain his report; the other changes were things I noticed
      while casting about for an explanation.
      
      Report: <CAMkU=1xEUuBphDwDmB1WjN4+td4kpnEniFaTBxnk1xzHCw8_OQ@mail.gmail.com>
      d6c9e05c
  4. 13 Aug, 2016 1 commit
    • Tom Lane's avatar
      Add SQL-accessible functions for inspecting index AM properties. · ed0097e4
      Tom Lane authored
      Per discussion, we should provide such functions to replace the lost
      ability to discover AM properties by inspecting pg_am (cf commit
      65c5fcd3).  The added functionality is also meant to displace any code
      that was looking directly at pg_index.indoption, since we'd rather not
      believe that the bit meanings in that field are part of any client API
      contract.
      
      As future-proofing, define the SQL API to not assume that properties that
      are currently AM-wide or index-wide will remain so unless they logically
      must be; instead, expose them only when inquiring about a specific index
      or even specific index column.  Also provide the ability for an index
      AM to override the behavior.
      
      In passing, document pg_am.amtype, overlooked in commit 473b9328.
      
      Andrew Gierth, with kibitzing by me and others
      
      Discussion: <87mvl5on7n.fsf@news-spur.riddles.org.uk>
      ed0097e4
  5. 12 Aug, 2016 4 commits
    • Tom Lane's avatar
      Doc: clarify that DROP ... CASCADE is recursive. · 49978781
      Tom Lane authored
      Apparently that's not obvious to everybody, so let's belabor the point.
      
      In passing, document that DROP POLICY has CASCADE/RESTRICT options (which
      it does, per gram.y) but they do nothing (I assume, anyway).  Also update
      some long-obsolete commentary in gram.y.
      
      Discussion: <20160805104837.1412.84915@wrigleys.postgresql.org>
      49978781
    • Tom Lane's avatar
      Fix inappropriate printing of never-measured times in EXPLAIN. · 4b234fd8
      Tom Lane authored
      EXPLAIN (ANALYZE, TIMING OFF) would print an elapsed time of zero for
      a trigger function, because no measurement has been taken but it printed
      the field anyway.  This isn't what EXPLAIN does elsewhere, so suppress it.
      
      In the same vein, EXPLAIN (ANALYZE, BUFFERS) with non-text output format
      would print buffer I/O timing numbers even when no measurement has been
      taken because track_io_timing is off.  That seems not per policy, either,
      so change it.
      
      Back-patch to 9.2 where these features were introduced.
      
      Maksim Milyutin
      
      Discussion: <081c0540-ecaa-bd29-3fd2-6358f3b359a9@postgrespro.ru>
      4b234fd8
    • Simon Riggs's avatar
      Code cleanup in SyncRepWaitForLSN() · e05f6f75
      Simon Riggs authored
      Commit 14e8803f removed LWLocks when accessing MyProc->syncRepState
      but didn't clean up the surrounding code and comments.
      
      Cleanup and backpatch to 9.5, to keep code similar.
      
      Julien Rouhaud, improved by suggestion from Michael Paquier,
      implemented trivially by myself.
      e05f6f75
    • Simon Riggs's avatar
      Correct TABLESAMPLE docs · 6e75559e
      Simon Riggs authored
      Original wording was correct but not the intended meaning.
      
      Reported by Patrik Wenger
      6e75559e
  6. 11 Aug, 2016 5 commits
  7. 09 Aug, 2016 3 commits
  8. 08 Aug, 2016 12 commits
    • Tom Lane's avatar
      Stamp 9.6beta4. · 67c08c0d
      Tom Lane authored
      67c08c0d
    • Bruce Momjian's avatar
      doc: update list of pg_trgm authors · cfdadf5f
      Bruce Momjian authored
      Author: Oleg Bartunov
      cfdadf5f
    • Tom Lane's avatar
      Update 9.6 release notes through today. · de4b3ea1
      Tom Lane authored
      de4b3ea1
    • Tom Lane's avatar
      Last-minute updates for release notes. · 9b8271c5
      Tom Lane authored
      Security: CVE-2016-5423, CVE-2016-5424
      9b8271c5
    • Peter Eisentraut's avatar
      Fix several one-byte buffer over-reads in to_number · 9a46324f
      Peter Eisentraut authored
      Several places in NUM_numpart_from_char(), which is called from the SQL
      function to_number(text, text), could accidentally read one byte past
      the end of the input buffer (which comes from the input text datum and
      is not null-terminated).
      
      1. One leading space character would be skipped, but there was no check
         that the input was at least one byte long.  This does not happen in
         practice, but for defensiveness, add a check anyway.
      
      2. Commit 4a3a1e2c apparently accidentally doubled that code that skips
         one space character (so that two spaces might be skipped), but there
         was no overflow check before skipping the second byte.  Fix by
         removing that duplicate code.
      
      3. A logic error would allow a one-byte over-read when looking for a
         trailing sign (S) placeholder.
      
      In each case, the extra byte cannot be read out directly, but looking at
      it might cause a crash.
      
      The third item was discovered by Piotr Stefaniak, the first two were
      found and analyzed by Tom Lane and Peter Eisentraut.
      9a46324f
    • Peter Eisentraut's avatar
      Translation updates · 34927b29
      Peter Eisentraut authored
      Source-Git-URL: git://git.postgresql.org/git/pgtranslation/messages.git
      Source-Git-Hash: cda21c1d7b160b303dc21dfe9d4169f2c8064c60
      34927b29
    • Tom Lane's avatar
      Fix two errors with nested CASE/WHEN constructs. · f0c7b789
      Tom Lane authored
      ExecEvalCase() tried to save a cycle or two by passing
      &econtext->caseValue_isNull as the isNull argument to its sub-evaluation of
      the CASE value expression.  If that subexpression itself contained a CASE,
      then *isNull was an alias for econtext->caseValue_isNull within the
      recursive call of ExecEvalCase(), leading to confusion about whether the
      inner call's caseValue was null or not.  In the worst case this could lead
      to a core dump due to dereferencing a null pointer.  Fix by not assigning
      to the global variable until control comes back from the subexpression.
      Also, avoid using the passed-in isNull pointer transiently for evaluation
      of WHEN expressions.  (Either one of these changes would have been
      sufficient to fix the known misbehavior, but it's clear now that each of
      these choices was in itself dangerous coding practice and best avoided.
      There do not seem to be any similar hazards elsewhere in execQual.c.)
      
      Also, it was possible for inlining of a SQL function that implements the
      equality operator used for a CASE comparison to result in one CASE
      expression's CaseTestExpr node being inserted inside another CASE
      expression.  This would certainly result in wrong answers since the
      improperly nested CaseTestExpr would be caused to return the inner CASE's
      comparison value not the outer's.  If the CASE values were of different
      data types, a crash might result; moreover such situations could be abused
      to allow disclosure of portions of server memory.  To fix, teach
      inline_function to check for "bare" CaseTestExpr nodes in the arguments of
      a function to be inlined, and avoid inlining if there are any.
      
      Heikki Linnakangas, Michael Paquier, Tom Lane
      
      Report: https://github.com/greenplum-db/gpdb/pull/327
      Report: <4DDCEEB8.50602@enterprisedb.com>
      Security: CVE-2016-5423
      f0c7b789
    • Noah Misch's avatar
      Obstruct shell, SQL, and conninfo injection via database and role names. · fcd15f13
      Noah Misch authored
      Due to simplistic quoting and confusion of database names with conninfo
      strings, roles with the CREATEDB or CREATEROLE option could escalate to
      superuser privileges when a superuser next ran certain maintenance
      commands.  The new coding rule for PQconnectdbParams() calls, documented
      at conninfo_array_parse(), is to pass expand_dbname=true and wrap
      literal database names in a trivial connection string.  Escape
      zero-length values in appendConnStrVal().  Back-patch to 9.1 (all
      supported versions).
      
      Nathan Bossart, Michael Paquier, and Noah Misch.  Reviewed by Peter
      Eisentraut.  Reported by Nathan Bossart.
      
      Security: CVE-2016-5424
      fcd15f13
    • Noah Misch's avatar
      Promote pg_dumpall shell/connstr quoting functions to src/fe_utils. · 41f18f02
      Noah Misch authored
      Rename these newly-extern functions with terms more typical of their new
      neighbors.  No functional changes; a subsequent commit will use them in
      more places.  Back-patch to 9.1 (all supported versions).  Back branches
      lack src/fe_utils, so instead rename the functions in place; the
      subsequent commit will copy them into the other programs using them.
      
      Security: CVE-2016-5424
      41f18f02
    • Noah Misch's avatar
      Fix Windows shell argument quoting. · bd653718
      Noah Misch authored
      The incorrect quoting may have permitted arbitrary command execution.
      At a minimum, it gave broader control over the command line to actors
      supposed to have control over a single argument.  Back-patch to 9.1 (all
      supported versions).
      
      Security: CVE-2016-5424
      bd653718
    • Noah Misch's avatar
      Reject, in pg_dumpall, names containing CR or LF. · 142c24c2
      Noah Misch authored
      These characters prematurely terminate Windows shell command processing,
      causing the shell to execute a prefix of the intended command.  The
      chief alternative to rejecting these characters was to bypass the
      Windows shell with CreateProcess(), but the ability to use such names
      has little value.  Back-patch to 9.1 (all supported versions).
      
      This change formally revokes support for these characters in database
      names and roles names.  Don't document this; the error message is
      self-explanatory, and too few users would benefit.  A future major
      release may forbid creation of databases and roles so named.  For now,
      check only at known weak points in pg_dumpall.  Future commits will,
      without notice, reject affected names from other frontend programs.
      
      Also extend the restriction to pg_dumpall --dbname=CONNSTR arguments and
      --file arguments.  Unlike the effects on role name arguments and
      database names, this does not reflect a broad policy change.  A
      migration to CreateProcess() could lift these two restrictions.
      
      Reviewed by Peter Eisentraut.
      
      Security: CVE-2016-5424
      142c24c2
    • Noah Misch's avatar
      Field conninfo strings throughout src/bin/scripts. · c4007171
      Noah Misch authored
      These programs nominally accepted conninfo strings, but they would
      proceed to use the original dbname parameter as though it were an
      unadorned database name.  This caused "reindexdb dbname=foo" to issue an
      SQL command that always failed, and other programs printed a conninfo
      string in error messages that purported to print a database name.  Fix
      both problems by using PQdb() to retrieve actual database names.
      Continue to print the full conninfo string when reporting a connection
      failure.  It is informative there, and if the database name is the sole
      problem, the server-side error message will include the name.  Beyond
      those user-visible fixes, this allows a subsequent commit to synthesize
      and use conninfo strings without that implementation detail leaking into
      messages.  As a side effect, the "vacuuming database" message now
      appears after, not before, the connection attempt.  Back-patch to 9.1
      (all supported versions).
      
      Reviewed by Michael Paquier and Peter Eisentraut.
      
      Security: CVE-2016-5424
      c4007171