1. 22 May, 2015 1 commit
    • Heikki Linnakangas's avatar
      At promotion, don't leave behind a partial segment on the old timeline. · 7cbee7c0
      Heikki Linnakangas authored
      With commit de768844, a copy of the partial segment was archived with the
      .partial suffix, but the original file was still left in pg_xlog, so it
      didn't actually solve the problems with archiving the partial segment that
      it was supposed to solve. With this patch, the partial segment is renamed
      rather than copied, so we only archive it with the .partial suffix.
      
      Also be more robust in detecting if the last segment is already being
      archived. Previously I used XLogArchiveIsBusy() for that, but that's not
      quite right. With archive_mode='always', there might be a .ready file for
      it, and we don't want to rename it to .partial in that case.
      
      The old segment is needed until we're fully committed to the new timeline,
      i.e. until we've written the end-of-recovery WAL record and updated the
      min recovery point and timeline in the control file. So move the renaming
      later in the startup sequence, after all that's been done.
      7cbee7c0
  2. 21 May, 2015 5 commits
    • Tom Lane's avatar
      More fixes for lossy-GiST-distance-functions patch. · c5dd8ead
      Tom Lane authored
      Paul Ramsey reported that commit 35fcb1b3
      induced a core dump on commuted ORDER BY expressions, because it was
      assuming that the indexorderby expression could be found verbatim in the
      relevant equivalence class, but it wasn't there.  We really don't need
      anything that complicated anyway; for the data types likely to be used for
      index ORDER BY operators in the foreseeable future, the exprType() of the
      ORDER BY expression will serve fine.  (The case where we'd have to work
      harder is where the ORDER BY expression's result is only binary-compatible
      with the declared input type of the ordering operator; long before worrying
      about that, one would need to get rid of GiST's hard-wired assumption that
      said datatype is float8.)
      
      Aside from fixing that crash and adding a regression test for the case,
      I did some desultory code review:
      
      nodeIndexscan.c was likewise overthinking how hard it ought to work to
      identify the datatype of the ORDER BY expressions.
      
      Add comments explaining how come nodeIndexscan.c can get away with
      simplifying assumptions about NULLS LAST ordering and no backward scan.
      
      Revert no-longer-needed changes of find_ec_member_for_tle(); while the
      new definition was no worse than the old, it wasn't better either, and
      it might cause back-patching pain.
      
      Revert entirely bogus additions to genam.h.
      c5dd8ead
    • Tom Lane's avatar
      Improve packing/alignment annotation for ItemPointerData. · d4b538ea
      Tom Lane authored
      We want this struct to be exactly a series of 3 int16 words, no more
      and no less.  Historically, at least, some ARM compilers preferred to
      pad it to 8 bytes unless coerced.  Our old way of doing that was just
      to use __attribute__((packed)), but as pointed out by Piotr Stefaniak,
      that does too much: it also licenses the compiler to give the struct
      only byte-alignment.  We don't want that because it adds access overhead,
      possibly quite significant overhead.  According to the GCC manual, what
      we want requires also specifying __attribute__((align(2))).  It's not
      entirely clear if all the relevant compilers accept this pragma as well,
      but we can hope the buildfarm will tell us if not.  We can also add a
      static assertion that should fire if the compiler padded the struct.
      
      Since the combination of these pragmas should define exactly what we
      want on any compiler that accepts them, let's try using them wherever
      we think they exist, not only for __arm__.  (This is likely to expose
      that the conditional definitions in c.h are inadequate, but finding
      that out would be a good thing.)
      
      The immediate motivation for this is that the current definition of
      ExecRowMark allows its curCtid field to be misaligned.  It is not clear
      whether there are any other uses of ItemPointerData with a similar hazard.
      We could change the definition of ExecRowMark if this doesn't work, but
      it would be far better to have a future-proof fix.
      
      Piotr Stefaniak, some further hacking by me
      d4b538ea
    • Robert Haas's avatar
      Correct two mistakes in the ALTER FOREIGN TABLE reference page. · 160a9aaa
      Robert Haas authored
      Etsuro Fujita
      160a9aaa
    • Fujii Masao's avatar
    • Fujii Masao's avatar
      Make recovery_target_action = pause work. · 85d0e661
      Fujii Masao authored
      Previously even if recovery_target_action was set to pause and
      the recovery target was reached, the recovery could never be paused.
      Because the setting of pause was *always* overridden with that of
      shutdown unexpectedly. This override is valid and intentional
      if hot_standby is not enabled because there is no way to resume
      the paused recovery in this case and the setting of pause is
      completely useless. But not if hot_standby is enabled.
      
      This patch changes the code so that the setting of pause is overridden
      with that of shutdown only when hot_standby is not enabled.
      
      Bug reported by Andres Freund
      85d0e661
  3. 20 May, 2015 3 commits
    • Tom Lane's avatar
      Another typo fix. · a6a66bd6
      Tom Lane authored
      In the spirit of the season.
      a6a66bd6
    • Heikki Linnakangas's avatar
      Fix more typos in comments. · fa60fb63
      Heikki Linnakangas authored
      Patch by CharSyam, plus a few more I spotted with grep.
      fa60fb63
    • Heikki Linnakangas's avatar
      Collection of typo fixes. · 4fc72cc7
      Heikki Linnakangas authored
      Use "a" and "an" correctly, mostly in comments. Two error messages were
      also fixed (they were just elogs, so no translation work required). Two
      function comments in pg_proc.h were also fixed. Etsuro Fujita reported one
      of these, but I found a lot more with grep.
      
      Also fix a few other typos spotted while grepping for the a/an typos.
      For example, "consists out of ..." -> "consists of ...". Plus a "though"/
      "through" mixup reported by Euler Taveira.
      
      Many of these typos were in old code, which would be nice to backpatch to
      make future backpatching easier. But much of the code was new, and I didn't
      feel like crafting separate patches for each branch. So no backpatching.
      4fc72cc7
  4. 19 May, 2015 11 commits
    • Simon Riggs's avatar
      Fix spelling in comment · f6a54fef
      Simon Riggs authored
      f6a54fef
    • Tom Lane's avatar
      Last-minute updates for release notes. · 5cb8519c
      Tom Lane authored
      Revise description of CVE-2015-3166, in line with scaled-back patch.
      Change release date.
      
      Security: CVE-2015-3166
      5cb8519c
    • Tom Lane's avatar
      Revert error-throwing wrappers for the printf family of functions. · 0c071936
      Tom Lane authored
      This reverts commit 16304a01, except
      for its changes in src/port/snprintf.c; as well as commit
      cac18a76 which is no longer needed.
      
      Fujii Masao reported that the previous commit caused failures in psql on
      OS X, since if one exits the pager program early while viewing a query
      result, psql sees an EPIPE error from fprintf --- and the wrapper function
      thought that was reason to panic.  (It's a bit surprising that the same
      does not happen on Linux.)  Further discussion among the security list
      concluded that the risk of other such failures was far too great, and
      that the one-size-fits-all approach to error handling embodied in the
      previous patch is unlikely to be workable.
      
      This leaves us again exposed to the possibility of the type of failure
      envisioned in CVE-2015-3166.  However, that failure mode is strictly
      hypothetical at this point: there is no concrete reason to believe that
      an attacker could trigger information disclosure through the supposed
      mechanism.  In the first place, the attack surface is fairly limited,
      since so much of what the backend does with format strings goes through
      stringinfo.c or psprintf(), and those already had adequate defenses.
      In the second place, even granting that an unprivileged attacker could
      control the occurrence of ENOMEM with some precision, it's a stretch to
      believe that he could induce it just where the target buffer contains some
      valuable information.  So we concluded that the risk of non-hypothetical
      problems induced by the patch greatly outweighs the security risks.
      We will therefore revert, and instead undertake closer analysis to
      identify specific calls that may need hardening, rather than attempt a
      universal solution.
      
      We have kept the portion of the previous patch that improved snprintf.c's
      handling of errors when it calls the platform's sprintf().  That seems to
      be an unalloyed improvement.
      
      Security: CVE-2015-3166
      0c071936
    • Andres Freund's avatar
      Various fixes around ON CONFLICT for rule deparsing. · 9bc77c45
      Andres Freund authored
      Neither the deparsing of the new alias for INSERT's target table, nor of
      the inference clause was supported. Also fixup a typo in an error
      message.
      
      Add regression tests to test those code paths.
      
      Author: Peter Geoghegan
      9bc77c45
    • Andres Freund's avatar
      Refactor ON CONFLICT index inference parse tree representation. · 0740cbd7
      Andres Freund authored
      Defer lookup of opfamily and input type of a of a user specified opclass
      until the optimizer selects among available unique indexes; and store
      the opclass in the parse analyzed tree instead.  The primary reason for
      doing this is that for rule deparsing it's easier to use the opclass
      than the previous representation.
      
      While at it also rename a variable in the inference code to better fit
      it's purpose.
      
      This is separate from the actual fixes for deparsing to make review
      easier.
      0740cbd7
    • Heikki Linnakangas's avatar
      Fix off-by-one error in Assertion. · b48437d1
      Heikki Linnakangas authored
      The point of the assertion is to ensure that the arrays allocated in stack
      are large enough, but the check was one item short.
      
      This won't matter in practice because MaxIndexTuplesPerPage is an
      overestimate, so you can't have that many items on a page in reality.
      But let's be tidy.
      
      Spotted by Anastasia Lubennikova. Backpatch to all supported versions, like
      the patch that added the assertion.
      b48437d1
    • Tom Lane's avatar
      Avoid collation dependence in indexes of system catalogs. · 0b28ea79
      Tom Lane authored
      No index in template0 should have collation-dependent ordering, especially
      not indexes on shared catalogs.  For most textual columns we avoid this
      issue by using type "name" (which sorts per strcmp()).  However there are a
      few indexed columns that we'd prefer to use "text" for, and for that, the
      default opclass text_ops is unsafe.  Fortunately, text_pattern_ops is safe
      (it sorts per memcmp()), and it has no real functional disadvantage for our
      purposes.  So change the indexes on pg_seclabel.provider and
      pg_shseclabel.provider to use text_pattern_ops.
      
      In passing, also mark pg_replication_origin.roname as using
      text_pattern_ops --- for some reason it was labeled varchar_pattern_ops
      which is just wrong, even though it accidentally worked.
      
      Add regression test queries to catch future errors of these kinds.
      
      We still can't do anything about the misdeclared pg_seclabel and
      pg_shseclabel indexes in back branches :-(
      0b28ea79
    • Tom Lane's avatar
      Revert "Change pg_seclabel.provider and pg_shseclabel.provider to type "name"." · afee0435
      Tom Lane authored
      This reverts commit b82a7be6.  There
      is a better (less invasive) way to fix it, which I will commit next.
      afee0435
    • Peter Eisentraut's avatar
      Message string improvements · 55c0da38
      Peter Eisentraut authored
      55c0da38
    • Peter Eisentraut's avatar
      Fix parse tree of DROP TRANSFORM and COMMENT ON TRANSFORM · 0779f2ba
      Peter Eisentraut authored
      The plain C string language name needs to be wrapped in makeString() so
      that the parse tree is copyable.  This is detectable by
      -DCOPY_PARSE_PLAN_TREES.  Add a test case for the COMMENT case.
      
      Also make the quoting in the error messages more consistent.
      
      discovered by Tom Lane
      0779f2ba
    • Tom Lane's avatar
      Change pg_seclabel.provider and pg_shseclabel.provider to type "name". · b82a7be6
      Tom Lane authored
      These were "text", but that's a bad idea because it has collation-dependent
      ordering.  No index in template0 should have collation-dependent ordering,
      especially not indexes on shared catalogs.  There was general agreement
      that provider names don't need to be longer than other identifiers, so we
      can fix this at a small waste of table space by changing from text to name.
      
      There's no way to fix the problem in the back branches, but we can hope
      that security labels don't yet have widespread-enough usage to make it
      urgent to fix.
      
      There needs to be a regression sanity test to prevent us from making this
      same mistake again; but before putting that in, we'll need to get rid of
      similar brain fade in the recently-added pg_replication_origin catalog.
      
      Note: for lack of a suitable testing environment, I've not really exercised
      this change.  I trust the buildfarm will show up any mistakes.
      b82a7be6
  5. 18 May, 2015 16 commits
    • Andres Freund's avatar
      Attach ON CONFLICT SET ... WHERE to the correct planstate. · e4942f7a
      Andres Freund authored
      The previous coding was a leftover from attempting to hang all the on
      conflict logic onto modify table's child nodes. It appears to not have
      actually caused problems except for explain.
      
      Add test exercising the broken and some other code paths.
      
      Author: Peter Geoghegan and Andres Freund
      e4942f7a
    • Tom Lane's avatar
      Put back a backwards-compatible version of sampling support functions. · 4db485e7
      Tom Lane authored
      Commit 83e176ec removed the longstanding
      support functions for block sampling without any consideration of the
      impact this would have on third-party FDWs.  The new API is not notably
      more functional for FDWs than the old, so forcing them to change doesn't
      seem like a good thing.  We can provide the old API as a wrapper (more
      or less) around the new one for a minimal amount of extra code.
      4db485e7
    • Tom Lane's avatar
      Recognize "REGRESS_OPTS += ..." syntax in MSVC build scripts. · f5916bb7
      Tom Lane authored
      Necessitated by commit b14cf229.
      Per buildfarm.
      f5916bb7
    • Robert Haas's avatar
      Fix error message in pre_sync_fname. · 922de19e
      Robert Haas authored
      The old one didn't include %m anywhere, and required extra
      translation.
      
      Report by Peter Eisentraut. Fix by me. Review by Tom Lane.
      922de19e
    • Tom Lane's avatar
      Last-minute updates for release notes. · 19d47ed2
      Tom Lane authored
      Add entries for security issues.
      
      Security: CVE-2015-3165 through CVE-2015-3167
      19d47ed2
    • Noah Misch's avatar
      pgcrypto: Report errant decryption as "Wrong key or corrupt data". · 85270ac7
      Noah Misch authored
      This has been the predominant outcome.  When the output of decrypting
      with a wrong key coincidentally resembled an OpenPGP packet header,
      pgcrypto could instead report "Corrupt data", "Not text data" or
      "Unsupported compression algorithm".  The distinct "Corrupt data"
      message added no value.  The latter two error messages misled when the
      decrypted payload also exhibited fundamental integrity problems.  Worse,
      error message variance in other systems has enabled cryptologic attacks;
      see RFC 4880 section "14. Security Considerations".  Whether these
      pgcrypto behaviors are likewise exploitable is unknown.
      
      In passing, document that pgcrypto does not resist side-channel attacks.
      Back-patch to 9.0 (all supported versions).
      
      Security: CVE-2015-3167
      85270ac7
    • Noah Misch's avatar
      Check return values of sensitive system library calls. · fd97bd41
      Noah Misch authored
      PostgreSQL already checked the vast majority of these, missing this
      handful that nearly cannot fail.  If putenv() failed with ENOMEM in
      pg_GSS_recvauth(), authentication would proceed with the wrong keytab
      file.  If strftime() returned zero in cache_locale_time(), using the
      unspecified buffer contents could lead to information exposure or a
      crash.  Back-patch to 9.0 (all supported versions).
      
      Other unchecked calls to these functions, especially those in frontend
      code, pose negligible security concern.  This patch does not address
      them.  Nonetheless, it is always better to check return values whose
      specification provides for indicating an error.
      
      In passing, fix an off-by-one error in strftime_win32()'s invocation of
      WideCharToMultiByte().  Upon retrieving a value of exactly MAX_L10N_DATA
      bytes, strftime_win32() would overrun the caller's buffer by one byte.
      MAX_L10N_DATA is chosen to exceed the length of every possible value, so
      the vulnerable scenario probably does not arise.
      
      Security: CVE-2015-3166
      fd97bd41
    • Noah Misch's avatar
      Add error-throwing wrappers for the printf family of functions. · 16304a01
      Noah Misch authored
      All known standard library implementations of these functions can fail
      with ENOMEM.  A caller neglecting to check for failure would experience
      missing output, information exposure, or a crash.  Check return values
      within wrappers and code, currently just snprintf.c, that bypasses the
      wrappers.  The wrappers do not return after an error, so their callers
      need not check.  Back-patch to 9.0 (all supported versions).
      
      Popular free software standard library implementations do take pains to
      bypass malloc() in simple cases, but they risk ENOMEM for floating point
      numbers, positional arguments, large field widths, and large precisions.
      No specification demands such caution, so this commit regards every call
      to a printf family function as a potential threat.
      
      Injecting the wrappers implicitly is a compromise between patch scope
      and design goals.  I would prefer to edit each call site to name a
      wrapper explicitly.  libpq and the ECPG libraries would, ideally, convey
      errors to the caller rather than abort().  All that would be painfully
      invasive for a back-patched security fix, hence this compromise.
      
      Security: CVE-2015-3166
      16304a01
    • Noah Misch's avatar
      Permit use of vsprintf() in PostgreSQL code. · cac18a76
      Noah Misch authored
      The next commit needs it.  Back-patch to 9.0 (all supported versions).
      cac18a76
    • Noah Misch's avatar
      Prevent a double free by not reentering be_tls_close(). · b0ce3850
      Noah Misch authored
      Reentering this function with the right timing caused a double free,
      typically crashing the backend.  By synchronizing a disconnection with
      the authentication timeout, an unauthenticated attacker could achieve
      this somewhat consistently.  Call be_tls_close() solely from within
      proc_exit_prepare().  Back-patch to 9.0 (all supported versions).
      
      Benkocs Norbert Attila
      
      Security: CVE-2015-3165
      b0ce3850
    • Heikki Linnakangas's avatar
      Fix typo in comment. · 8cc7a4c5
      Heikki Linnakangas authored
      Jim Nasby
      8cc7a4c5
    • Heikki Linnakangas's avatar
      Put back stats-collector restarting code, removed accidentally. · 4df13289
      Heikki Linnakangas authored
      Removed that code snippet accidentally in the archive_mode='always' patch.
      
      Also, use varname-tags for archive_command in the docs.
      
      Fujii Masao
      4df13289
    • Fujii Masao's avatar
      Don't classify REINDEX command as DDL in the pg_audit doc. · d773b557
      Fujii Masao authored
      The commit a936743b changed the class of REINDEX but forgot to update the doc.
      d773b557
    • Peter Eisentraut's avatar
      Add new files to nls.mk · 382b479a
      Peter Eisentraut authored
      382b479a
    • Tom Lane's avatar
      Fix failure to copy IndexScan.indexorderbyops in copyfuncs.c. · 42466191
      Tom Lane authored
      This oversight results in a crash at executor startup if the plan has
      been copied.  outfuncs.c was missed as well.
      
      While we could probably have taught both those files to cope with the
      originally chosen representation of an Oid array, it would have been
      painful, not least because there'd be no easy way to verify the array
      length.  An Oid List is far easier to work with.  And AFAICS, there is
      no particular notational benefit to using an array rather than a list
      in the existing parts of the patch either.  So just change it to a list.
      
      Error in commit 35fcb1b3, which is new,
      so no need for back-patch.
      42466191
    • Tom Lane's avatar
      Use += not = to set makefile variables after including base makefiles. · b14cf229
      Tom Lane authored
      The previous coding in hstore_plpython and ltree_plpython wiped out any
      values set by the base makefiles.  This at least had the effect of running
      the tests in "regression" not "contrib_regression" as expected.  These
      being pretty new modules, there might be other bad effects we'd not
      noticed yet.
      b14cf229
  6. 17 May, 2015 4 commits