1. 15 Aug, 2016 3 commits
    • Tom Lane's avatar
      Stamp HEAD as 10devel. · ca9112a4
      Tom Lane authored
      This is a good bit more complicated than the average new-version stamping
      commit, because it includes various adjustments in pursuit of changing
      from three-part to two-part version numbers.  It's likely some further
      work will be needed around that change; but this is enough to get through
      the regression tests, at least in Unix builds.
      
      Peter Eisentraut and Tom Lane
      ca9112a4
    • Tom Lane's avatar
      Final pgindent + perltidy run for 9.6. · b5bce6c1
      Tom Lane authored
      b5bce6c1
    • Tom Lane's avatar
      Simplify the process of perltidy'ing our Perl files. · 05d8dec6
      Tom Lane authored
      Wrap the perltidy invocation into a shell script to reduce the risk of
      copy-and-paste errors.  Include removal of *.bak files in the script,
      so they don't accidentally get committed.  Improve the directions in
      the README file.
      05d8dec6
  2. 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
  3. 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
  4. 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
  5. 11 Aug, 2016 5 commits
  6. 09 Aug, 2016 3 commits
  7. 08 Aug, 2016 20 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
    • Noah Misch's avatar
      Introduce a psql "\connect -reuse-previous=on|off" option. · 9d924e9a
      Noah Misch authored
      The decision to reuse values of parameters from a previous connection
      has been based on whether the new target is a conninfo string.  Add this
      means of overriding that default.  This feature arose as one component
      of a fix for security vulnerabilities in pg_dump, pg_dumpall, and
      pg_upgrade, so back-patch to 9.1 (all supported versions).  In 9.3 and
      later, comment paragraphs that required update had already-incorrect
      claims about behavior when no connection is open; fix those problems.
      
      Security: CVE-2016-5424
      9d924e9a
    • Noah Misch's avatar
      Sort out paired double quotes in \connect, \password and \crosstabview. · 984e5beb
      Noah Misch authored
      In arguments, these meta-commands wrongly treated each pair as closing
      the double quoted string.  Make the behavior match the documentation.
      This is a compatibility break, but I more expect to find software with
      untested reliance on the documented behavior than software reliant on
      today's behavior.  Back-patch to 9.1 (all supported versions).
      
      Reviewed by Tom Lane and Peter Eisentraut.
      
      Security: CVE-2016-5424
      984e5beb
    • Peter Eisentraut's avatar
      doc: Update benchmark results · a1f8b6bd
      Peter Eisentraut authored
      From: Alexander Law <exclusion@gmail.com>
      a1f8b6bd
    • Peter Eisentraut's avatar
      Make format() error messages consistent again · 8a56d4e3
      Peter Eisentraut authored
      07d25a96 changed only one occurrence.  Change the other one as well.
      8a56d4e3
    • Tom Lane's avatar
      Update 9.6 release notes through today. · be7f7ee5
      Tom Lane authored
      be7f7ee5
    • Peter Eisentraut's avatar
      Correct column name in information schema · d8710f18
      Peter Eisentraut authored
      Although the standard has routines.result_cast_character_set_name, given
      the naming of the surrounding columns, we concluded that this must have
      been a mistake and that result_cast_char_set_name was intended, so
      change the implementation.  The documentation was already using the new
      name.
      
      found by Clément Prévost <prevostclement@gmail.com>
      d8710f18
    • Tom Lane's avatar
      19322c0a
    • Peter Eisentraut's avatar
  8. 07 Aug, 2016 2 commits
    • Tom Lane's avatar
      Fix misestimation of n_distinct for a nearly-unique column with many nulls. · 95bee941
      Tom Lane authored
      If ANALYZE found no repeated non-null entries in its sample, it set the
      column's stadistinct value to -1.0, intending to indicate that the entries
      are all distinct.  But what this value actually means is that the number
      of distinct values is 100% of the table's rowcount, and thus it was
      overestimating the number of distinct values by however many nulls there
      are.  This could lead to very poor selectivity estimates, as for example
      in a recent report from Andreas Joseph Krogh.  We should discount the
      stadistinct value by whatever we've estimated the nulls fraction to be.
      (That is what will happen if we choose to use a negative stadistinct for
      a column that does have repeated entries, so this code path was just
      inconsistent.)
      
      In addition to fixing the stadistinct entries stored by several different
      ANALYZE code paths, adjust the logic where get_variable_numdistinct()
      forces an "all distinct" estimate on the basis of finding a relevant unique
      index.  Unique indexes don't reject nulls, so there's no reason to assume
      that the null fraction doesn't apply.
      
      Back-patch to all supported branches.  Back-patching is a bit of a judgment
      call, but this problem seems to affect only a few users (else we'd have
      identified it long ago), and it's bad enough when it does happen that
      destabilizing plan choices in a worse direction seems unlikely.
      
      Patch by me, with documentation wording suggested by Dean Rasheed
      
      Report: <VisenaEmail.26.df42f82acae38a58.156463942b8@tc7-visena>
      Discussion: <16143.1470350371@sss.pgh.pa.us>
      95bee941
    • Tom Lane's avatar
      Fix crash when pg_get_viewdef_name_ext() is passed a non-view relation. · 8a8c6b53
      Tom Lane authored
      Oversight in commit 976b24fb.
      
      Andreas Seltenreich
      
      Report: <87y448l3ag.fsf@credativ.de>
      8a8c6b53