Skip to content
Snippets Groups Projects
  1. Feb 18, 2016
    • Tom Lane's avatar
      Fix multiple bugs in contrib/pgstattuple's pgstatindex() function. · 29f29972
      Tom Lane authored
      Dead or half-dead index leaf pages were incorrectly reported as live, as a
      consequence of a code rearrangement I made (during a moment of severe brain
      fade, evidently) in commit d287818e.
      
      The index metapage was not counted in index_size, causing that result to
      not agree with the actual index size on-disk.
      
      Index root pages were not counted in internal_pages, which is inconsistent
      compared to the case of a root that's also a leaf (one-page index), where
      the root would be counted in leaf_pages.  Aside from that inconsistency,
      this could lead to additional transient discrepancies between the reported
      page counts and index_size, since it's possible for pgstatindex's scan to
      see zero or multiple pages marked as BTP_ROOT, if the root moves due to
      a split during the scan.  With these fixes, index_size will always be
      exactly one page more than the sum of the displayed page counts.
      
      Also, the index_size result was incorrectly documented as being measured in
      pages; it's always been measured in bytes.  (While fixing that, I couldn't
      resist doing some small additional wordsmithing on the pgstattuple docs.)
      
      Including the metapage causes the reported index_size to not be zero for
      an empty index.  To preserve the desired property that the pgstattuple
      regression test results are platform-independent (ie, BLCKSZ configuration
      independent), scale the index_size result in the regression tests.
      
      The documentation issue was reported by Otsuka Kenji, and the inconsistent
      root page counting by Peter Geoghegan; the other problems noted by me.
      Back-patch to all supported branches, because this has been broken for
      a long time.
      29f29972
  2. Feb 17, 2016
    • Tom Lane's avatar
      Make plpython cope with funny characters in function names. · 7d48349f
      Tom Lane authored
      A function name that's double-quoted in SQL can contain almost any
      characters, but we were using that name directly as part of the name
      generated for the Python-level function, and Python doesn't like
      anything that isn't pretty much a standard identifier.  To fix,
      replace anything that isn't an ASCII letter or digit with an underscore
      in the generated name.  This doesn't create any risk of duplicate Python
      function names because we were already appending the function OID to
      the generated name to ensure uniqueness.  Per bug #13960 from Jim Nasby.
      
      Patch by Jim Nasby, modified a bit by me.  Back-patch to all
      supported branches.
      7d48349f
  3. Feb 16, 2016
    • Tom Lane's avatar
      Improve documentation about CREATE INDEX CONCURRENTLY. · 528db6ab
      Tom Lane authored
      Clarify the description of which transactions will block a CREATE INDEX
      CONCURRENTLY command from proceeding, and mention that the index might
      still not be usable after CREATE INDEX completes.  (This happens if the
      index build detected broken HOT chains, so that pg_index.indcheckxmin gets
      set, and there are open old transactions preventing the xmin horizon from
      advancing past the index's initial creation.  I didn't want to explain what
      broken HOT chains are, though, so I omitted an explanation of exactly when
      old transactions prevent the index from being used.)
      
      Per discussion with Chris Travers.  Back-patch to all supported branches,
      since the same text appears in all of them.
      528db6ab
    • Tatsuo Ishii's avatar
      Improve wording in the planner doc · 779c46a3
      Tatsuo Ishii authored
      Change "In this case" to "In the example above" to clarify what it
      actually refers to.
      779c46a3
    • Fujii Masao's avatar
      Correct the formulas for System V IPC parameters SEMMNI and SEMMNS in docs. · 8a96651c
      Fujii Masao authored
      In runtime.sgml, the old formulas for calculating the reasonable
      values of SEMMNI and SEMMNS were incorrect. They have forgotten to
      count the number of semaphores which both the checkpointer process
      (introduced in 9.2) and the background worker processes (introduced
      in 9.3) need.
      
      This commit fixes those formulas so that they count the number of
      semaphores which the checkpointer process and the background worker
      processes need.
      
      Report and patch by Kyotaro Horiguchi. Only the patch for 9.3 was
      modified by me. Back-patch to 9.2 where the checkpointer process was
      added and the number of needed semaphores was increased.
      
      Author: Kyotaro Horiguchi
      Reviewed-by: Fujii Masao
      Backpatch: 9.2
      Discussion: http://www.postgresql.org/message-id/20160203.125119.66820697.horiguchi.kyotaro@lab.ntt.co.jp
      8a96651c
    • Alvaro Herrera's avatar
      pgbench: avoid FD_ISSET on an invalid file descriptor · daac5377
      Alvaro Herrera authored
      The original code wasn't careful to test the file descriptor returned by
      PQsocket() for an invalid socket.  If an invalid socket did turn up,
      that would amount to calling FD_ISSET with fd = -1, whereby undefined
      behavior can be invoked.
      
      To fix, test file descriptor for validity and stop further processing if
      that fails.
      
      Problem noticed by Coverity.
      
      There is an existing FD_ISSET callsite that does check for invalid
      sockets beforehand, but the error message reported by it was
      strerror(errno); in testing the aforementioned change, that turns out to
      result in "bad socket: Success" which isn't terribly helpful.  Instead
      use PQerrorMessage() in both places which is more likely to contain an
      useful error message.
      
      Backpatch-through: 9.1.
      daac5377
  4. Feb 15, 2016
    • Tom Lane's avatar
      Suppress compiler warnings about useless comparison of unsigned to zero. · e781baa6
      Tom Lane authored
      Reportedly, some compilers warn about tests like "c < 0" if c is unsigned,
      and hence complain about the character range checks I added in commit
      3bb3f42f.  This is a bit of a pain since
      the regex library doesn't really want to assume that chr is unsigned.
      However, since any such reconfiguration would involve manual edits of
      regcustom.h anyway, we can put it on the shoulders of whoever wants to
      do that to adjust this new range-checking macro correctly.
      
      Per gripes from Coverity and Andres.
      e781baa6
  5. Feb 11, 2016
    • Noah Misch's avatar
      Accept pg_ctl timeout from the PGCTLTIMEOUT environment variable. · 4421b525
      Noah Misch authored
      Many automated test suites call pg_ctl.  Buildfarm members axolotl,
      hornet, mandrill, shearwater, sungazer and tern have failed when server
      shutdown took longer than the pg_ctl default 60s timeout.  This addition
      permits slow hosts to easily raise the timeout without us editing a
      --timeout argument into every test suite pg_ctl call.  Back-patch to 9.1
      (all supported versions) for the sake of automated testing.
      
      Reviewed by Tom Lane.
      4421b525
    • Tom Lane's avatar
      Avoid use of sscanf() to parse ispell dictionary files. · 64f99a2e
      Tom Lane authored
      It turns out that on FreeBSD-derived platforms (including OS X), the
      *scanf() family of functions is pretty much brain-dead about multibyte
      characters.  In particular it will apply isspace() to individual bytes
      of input even when those bytes are part of a multibyte character, thus
      allowing false recognition of a field-terminating space.
      
      We appear to have little alternative other than instituting a coding
      rule that *scanf() is not to be used if the input string might contain
      multibyte characters.  (There was some discussion of relying on "%ls",
      but that probably just moves the portability problem somewhere else,
      and besides it doesn't fully prevent BSD *scanf() from using isspace().)
      
      This patch is a down payment on that: it gets rid of use of sscanf()
      to parse ispell dictionary files, which are certainly at great risk
      of having a problem.  The code is cleaner this way anyway, though
      a bit longer.
      
      In passing, improve a few comments.
      
      Report and patch by Artur Zakirov, reviewed and somewhat tweaked by me.
      Back-patch to all supported branches.
      64f99a2e
  6. Feb 08, 2016
    • Tom Lane's avatar
      Stamp 9.2.15. · a0606058
      Tom Lane authored
    • Peter Eisentraut's avatar
      Translation updates · 6a10dd08
      Peter Eisentraut authored
      Source-Git-URL: git://git.postgresql.org/git/pgtranslation/messages.git
      Source-Git-Hash: e640b67db0ef2d766eb6b5ec60dc3ba5ed4e2ede
      6a10dd08
    • Tom Lane's avatar
      Last-minute updates for release notes. · 9dafc413
      Tom Lane authored
      Security: CVE-2016-0773
      9dafc413
    • Tom Lane's avatar
      Fix some regex issues with out-of-range characters and large char ranges. · e93516cf
      Tom Lane authored
      Previously, our regex code defined CHR_MAX as 0xfffffffe, which is a
      bad choice because it is outside the range of type "celt" (int32).
      Characters approaching that limit could lead to infinite loops in logic
      such as "for (c = a; c <= b; c++)" where c is of type celt but the
      range bounds are chr.  Such loops will work safely only if CHR_MAX+1
      is representable in celt, since c must advance to beyond b before the
      loop will exit.
      
      Fortunately, there seems no reason not to restrict CHR_MAX to 0x7ffffffe.
      It's highly unlikely that Unicode will ever assign codes that high, and
      none of our other backend encodings need characters beyond that either.
      
      In addition to modifying the macro, we have to explicitly enforce character
      range restrictions on the values of \u, \U, and \x escape sequences, else
      the limit is trivially bypassed.
      
      Also, the code for expanding case-independent character ranges in bracket
      expressions had a potential integer overflow in its calculation of the
      number of characters it could generate, which could lead to allocating too
      small a character vector and then overwriting memory.  An attacker with the
      ability to supply arbitrary regex patterns could easily cause transient DOS
      via server crashes, and the possibility for privilege escalation has not
      been ruled out.
      
      Quite aside from the integer-overflow problem, the range expansion code was
      unnecessarily inefficient in that it always produced a result consisting of
      individual characters, abandoning the knowledge that we had a range to
      start with.  If the input range is large, this requires excessive memory.
      Change it so that the original range is reported as-is, and then we add on
      any case-equivalent characters that are outside that range.  With this
      approach, we can bound the number of individual characters allowed without
      sacrificing much.  This patch allows at most 100000 individual characters,
      which I believe to be more than the number of case pairs existing in
      Unicode, so that the restriction will never be hit in practice.
      
      It's still possible for range() to take awhile given a large character code
      range, so also add statement-cancel detection to its loop.  The downstream
      function dovec() also lacked cancel detection, and could take a long time
      given a large output from range().
      
      Per fuzz testing by Greg Stark.  Back-patch to all supported branches.
      
      Security: CVE-2016-0773
      e93516cf
  7. Feb 07, 2016
    • Tom Lane's avatar
      Improve documentation about PRIMARY KEY constraints. · ddcc256c
      Tom Lane authored
      Get rid of the false implication that PRIMARY KEY is exactly equivalent to
      UNIQUE + NOT NULL.  That was more-or-less true at one time in our
      implementation, but the standard doesn't say that, and we've grown various
      features (many of them required by spec) that treat a pkey differently from
      less-formal constraints.  Per recent discussion on pgsql-general.
      
      I failed to resist the temptation to do some other wordsmithing in the
      same area.
      ddcc256c
    • Tom Lane's avatar
      3d6c9888
  8. Feb 06, 2016
    • Noah Misch's avatar
      Force certain "pljava" custom GUCs to be PGC_SUSET. · de9766d3
      Noah Misch authored
      Future PL/Java versions will close CVE-2016-0766 by making these GUCs
      PGC_SUSET.  This PostgreSQL change independently mitigates that PL/Java
      vulnerability, helping sites that update PostgreSQL more frequently than
      PL/Java.  Back-patch to 9.1 (all supported versions).
      de9766d3
  9. Feb 05, 2016
  10. Feb 04, 2016
    • Tom Lane's avatar
      In pg_dump, ensure that view triggers are processed after view rules. · 4f58a700
      Tom Lane authored
      If a view is split into CREATE TABLE + CREATE RULE to break a circular
      dependency, then any triggers on the view must be dumped/reloaded after
      the CREATE RULE; else the backend may reject the CREATE TRIGGER because
      it's the wrong type of trigger for a plain table.  This works all right
      in plain dump/restore because of pg_dump's sorting heuristic that places
      triggers after rules.  However, when using parallel restore, the ordering
      must be enforced by a dependency --- and we didn't have one.
      
      Fixing this is a mere matter of adding an addObjectDependency() call,
      except that we need to be able to find all the triggers belonging to the
      view relation, and there was no easy way to do that.  Add fields to
      pg_dump's TableInfo struct to remember where the associated TriggerInfo
      struct(s) are.
      
      Per bug report from Dennis Kögel.  The failure can be exhibited at least
      as far back as 9.1, so back-patch to all supported branches.
      4f58a700
  11. Feb 03, 2016
  12. Feb 01, 2016
  13. Jan 31, 2016
  14. Jan 29, 2016
    • Tom Lane's avatar
      Fix incorrect pattern-match processing in psql's \det command. · a362cc2e
      Tom Lane authored
      listForeignTables' invocation of processSQLNamePattern did not match up
      with the other ones that handle potentially-schema-qualified names; it
      failed to make use of pg_table_is_visible() and also passed the name
      arguments in the wrong order.  Bug seems to have been aboriginal in commit
      0d692a0d.  It accidentally sort of worked as long as you didn't
      inquire too closely into the behavior, although the silliness was later
      exposed by inconsistencies in the test queries added by 59efda3e
      (which I probably should have questioned at the time, but didn't).
      
      Per bug #13899 from Reece Hart.  Patch by Reece Hart and Tom Lane.
      Back-patch to all affected branches.
      a362cc2e
  15. Jan 26, 2016
  16. Jan 20, 2016
  17. Jan 15, 2016
  18. Jan 14, 2016
    • Magnus Hagander's avatar
      Properly close token in sspi authentication · df0bd5a0
      Magnus Hagander authored
      We can never leak more than one token, but we shouldn't do that. We
      don't bother closing it in the error paths since the process will
      exit shortly anyway.
      
      Christian Ullrich
      df0bd5a0
    • Tom Lane's avatar
      Handle extension members when first setting object dump flags in pg_dump. · be2b2765
      Tom Lane authored
      pg_dump's original approach to handling extension member objects was to
      run around and clear (or set) their dump flags rather late in its data
      collection process.  Unfortunately, quite a lot of code expects those flags
      to be valid before that; which was an entirely reasonable expectation
      before we added extensions.  In particular, this explains Karsten Hilbert's
      recent report of pg_upgrade failing on a database in which an extension
      has been installed into the pg_catalog schema.  Its objects are initially
      marked as not-to-be-dumped on the strength of their schema, and later we
      change them to must-dump because we're doing a binary upgrade of their
      extension; but we've already skipped essential tasks like making associated
      DO_SHELL_TYPE objects.
      
      To fix, collect extension membership data first, and incorporate it in the
      initial setting of the dump flags, so that those are once again correct
      from the get-go.  This has the undesirable side effect of slightly
      lengthening the time taken before pg_dump acquires table locks, but testing
      suggests that the increase in that window is not very much.
      
      Along the way, get rid of ugly special-case logic for deciding whether
      to dump procedural languages, FDWs, and foreign servers; dump decisions
      for those are now correct up-front, too.
      
      In 9.3 and up, this also fixes erroneous logic about when to dump event
      triggers (basically, they were *always* dumped before).  In 9.5 and up,
      transform objects had that problem too.
      
      Since this problem came in with extensions, back-patch to all supported
      versions.
      be2b2765
  19. Jan 12, 2016
    • Tom Lane's avatar
      Avoid dump/reload problems when using both plpython2 and plpython3. · 3843ba51
      Tom Lane authored
      Commit 80371601 installed a safeguard against loading plpython2
      and plpython3 at the same time, but asserted that both could still be
      used in the same database, just not in the same session.  However, that's
      not actually all that practical because dumping and reloading will fail
      (since both libraries necessarily get loaded into the restoring session).
      pg_upgrade is even worse, because it checks for missing libraries by
      loading every .so library mentioned in the entire installation into one
      session, so that you can have only one across the whole cluster.
      
      We can improve matters by not throwing the error immediately in _PG_init,
      but only when and if we're asked to do something that requires calling
      into libpython.  This ameliorates both of the above situations, since
      while execution of CREATE LANGUAGE, CREATE FUNCTION, etc will result in
      loading plpython, it isn't asked to do anything interesting (at least
      not if check_function_bodies is off, as it will be during a restore).
      
      It's possible that this opens some corner-case holes in which a crash
      could be provoked with sufficient effort.  However, since plpython
      only exists as an untrusted language, any such crash would require
      superuser privileges, making it "don't do that" not a security issue.
      To reduce the hazards in this area, the error is still FATAL when it
      does get thrown.
      
      Per a report from Paul Jones.  Back-patch to 9.2, which is as far back
      as the patch applies without work.  (It could be made to work in 9.1,
      but given the lack of previous complaints, I'm disinclined to expend
      effort so far back.  We've been pretty desultory about support for
      Python 3 in 9.1 anyway.)
      3843ba51
  20. Jan 09, 2016
    • Tom Lane's avatar
      Clean up some lack-of-STRICT issues in the core code, too. · 0e7d084a
      Tom Lane authored
      A scan for missed proisstrict markings in the core code turned up
      these functions:
      
      brin_summarize_new_values
      pg_stat_reset_single_table_counters
      pg_stat_reset_single_function_counters
      pg_create_logical_replication_slot
      pg_create_physical_replication_slot
      pg_drop_replication_slot
      
      The first three of these take OID, so a null argument will normally look
      like a zero to them, resulting in "ERROR: could not open relation with OID
      0" for brin_summarize_new_values, and no action for the pg_stat_reset_XXX
      functions.  The other three will dump core on a null argument, though this
      is mitigated by the fact that they won't do so until after checking that
      the caller is superuser or has rolreplication privilege.
      
      In addition, the pg_logical_slot_get/peek[_binary]_changes family was
      intentionally marked nonstrict, but failed to make nullness checks on all
      the arguments; so again a null-pointer-dereference crash is possible but
      only for superusers and rolreplication users.
      
      Add the missing ARGISNULL checks to the latter functions, and mark the
      former functions as strict in pg_proc.  Make that change in the back
      branches too, even though we can't force initdb there, just so that
      installations initdb'd in future won't have the issue.  Since none of these
      bugs rise to the level of security issues (and indeed the pg_stat_reset_XXX
      functions hardly misbehave at all), it seems sufficient to do this.
      
      In addition, fix some order-of-operations oddities in the slot_get_changes
      family, mostly cosmetic, but not the part that moves the function's last
      few operations into the PG_TRY block.  As it stood, there was significant
      risk for an error to exit without clearing historical information from
      the system caches.
      
      The slot_get_changes bugs go back to 9.4 where that code was introduced.
      Back-patch appropriate subsets of the pg_proc changes into all active
      branches, as well.
      0e7d084a
    • Tom Lane's avatar
      Clean up code for widget_in() and widget_out(). · 1eb2c4bf
      Tom Lane authored
      Given syntactically wrong input, widget_in() could call atof() with an
      indeterminate pointer argument, typically leading to a crash; or if it
      didn't do that, it might return a NULL pointer, which again would lead
      to a crash since old-style C functions aren't supposed to do things
      that way.  Fix that by correcting the off-by-one syntax test and
      throwing a proper error rather than just returning NULL.
      
      Also, since widget_in and widget_out have been marked STRICT for a
      long time, their tests for null inputs are just dead code; remove 'em.
      In the oldest branches, also improve widget_out to use snprintf not
      sprintf, just to be sure.
      
      In passing, get rid of a long-since-useless sprintf into a local buffer
      that nothing further is done with, and make some other minor coding
      style cleanups.
      
      In the intended regression-testing usage of these functions, none of
      this is very significant; but if the regression test database were
      left around in a production installation, these bugs could amount
      to a minor security hazard.
      
      Piotr Stefaniak, Michael Paquier, and Tom Lane
      1eb2c4bf
    • Tom Lane's avatar
      Add STRICT to some C functions created by the regression tests. · 55caeeee
      Tom Lane authored
      These functions readily crash when passed a NULL input value.  The tests
      themselves do not pass NULL values to them; but when the regression
      database is used as a basis for fuzz testing, they cause a lot of noise.
      Also, if someone were to leave a regression database lying about in a
      production installation, these would create a minor security hazard.
      
      Andreas Seltenreich
      55caeeee
  21. Jan 08, 2016
    • Tom Lane's avatar
      Fix unobvious interaction between -X switch and subdirectory creation. · 957e1117
      Tom Lane authored
      Turns out the only reason initdb -X worked is that pg_mkdir_p won't
      whine if you point it at something that's a symlink to a directory.
      Otherwise, the attempt to create pg_xlog/ just like all the other
      subdirectories would have failed.  Let's be a little more explicit
      about what's happening.  Oversight in my patch for bug #13853
      (mea culpa for not testing -X ...)
      957e1117
  22. Jan 07, 2016
    • Tom Lane's avatar
      Use plain mkdir() not pg_mkdir_p() to create subdirectories of PGDATA. · d6d6400c
      Tom Lane authored
      When we're creating subdirectories of PGDATA during initdb, we know darn
      well that the parent directory exists (or should exist) and that the new
      subdirectory doesn't (or shouldn't).  There is therefore no need to use
      anything more complicated than mkdir().  Using pg_mkdir_p() just opens us
      up to unexpected failure modes, such as the one exhibited in bug #13853
      from Nuri Boardman.  It's not very clear why pg_mkdir_p() went wrong there,
      but it is clear that we didn't need to be trying to create parent
      directories in the first place.  We're not even saving any code, as proven
      by the fact that this patch nets out at minus five lines.
      
      Since this is a response to a field bug report, back-patch to all branches.
      d6d6400c
    • Alvaro Herrera's avatar
      Windows: Make pg_ctl reliably detect service status · 5c4cbd5d
      Alvaro Herrera authored
      pg_ctl is using isatty() to verify whether the process is running in a
      terminal, and if not it sends its output to Windows' Event Log ... which
      does the wrong thing when the output has been redirected to a pipe, as
      reported in bug #13592.
      
      To fix, make pg_ctl use the code we already have to detect service-ness:
      in the master branch, move src/backend/port/win32/security.c to src/port
      (with suitable tweaks so that it runs properly in backend and frontend
      environments); pg_ctl already has access to pgport so it Just Works.  In
      older branches, that's likely to cause trouble, so instead duplicate the
      required code in pg_ctl.c.
      
      Author: Michael Paquier
      Bug report and diagnosis: Egon Kocjan
      Backpatch: all supported branches
      5c4cbd5d
  23. Jan 04, 2016
    • Tom Lane's avatar
      Fix treatment of *lpNumberOfBytesRecvd == 0: that's a completion condition. · 9b2eacba
      Tom Lane authored
      pgwin32_recv() has treated a non-error return of zero bytes from WSARecv()
      as being a reason to block ever since the current implementation was
      introduced in commit a4c40f14.  However, so far as one can tell
      from Microsoft's documentation, that is just wrong: what it means is
      graceful connection closure (in stream protocols) or receipt of a
      zero-length message (in message protocols), and neither case should result
      in blocking here.  The only reason the code worked at all was that control
      then fell into the retry loop, which did *not* treat zero bytes specially,
      so we'd get out after only wasting some cycles.  But as of 9.5 we do not
      normally reach the retry loop and so the bug is exposed, as reported by
      Shay Rojansky and diagnosed by Andres Freund.
      
      Remove the unnecessary test on the byte count, and rearrange the code
      in the retry loop so that it looks identical to the initial sequence.
      
      Back-patch of commit 90e61df8.  The
      original plan was to apply this only to 9.5 and up, but after discussion
      and buildfarm testing, it seems better to back-patch.  The noblock code
      path has been at risk of this problem since it was introduced (in 9.0);
      if it did happen in pre-9.5 branches, the symptom would be that a walsender
      would wait indefinitely rather than noticing a loss of connection.  While
      we lack proof that the case has been seen in the field, it seems possible
      that it's happened without being reported.
      9b2eacba
  24. Jan 03, 2016
    • Tom Lane's avatar
      Teach pg_dump to quote reloption values safely. · 1eb515ad
      Tom Lane authored
      Commit c7e27bec fixed this on the backend side, but we neglected
      the fact that several code paths in pg_dump were printing reloptions
      values that had not gotten massaged by ruleutils.  Apply essentially the
      same quoting logic in those places, too.
      1eb515ad
  25. Jan 02, 2016
    • Tom Lane's avatar
      Fix overly-strict assertions in spgtextproc.c. · 5c0d6230
      Tom Lane authored
      spg_text_inner_consistent is capable of reconstructing an empty string
      to pass down to the next index level; this happens if we have an empty
      string coming in, no prefix, and a dummy node label.  (In practice, what
      is needed to trigger that is insertion of a whole bunch of empty-string
      values.)  Then, we will arrive at the next level with in->level == 0
      and a non-NULL (but zero length) in->reconstructedValue, which is valid
      but the Assert tests weren't expecting it.
      
      Per report from Andreas Seltenreich.  This has no impact in non-Assert
      builds, so should not be a problem in production, but back-patch to
      all affected branches anyway.
      
      In passing, remove a couple of useless variable initializations and
      shorten the code by not duplicating DatumGetPointer() calls.
      5c0d6230
    • Tom Lane's avatar
      Adjust back-branch release note description of commits a2a718b2 et al. · c6ab1782
      Tom Lane authored
      As pointed out by Michael Paquier, recovery_min_apply_delay didn't exist
      in 9.0-9.3, making the release note text not very useful.  Instead make it
      talk about recovery_target_xid, which did exist then.
      
      9.0 is already out of support, but we can fix the text in the newer
      branches' copies of its release notes.
      c6ab1782
    • Bruce Momjian's avatar
      Update copyright for 2016 · 25b04756
      Bruce Momjian authored
      Backpatch certain files through 9.1
      25b04756
  26. Jan 01, 2016
    • Tom Lane's avatar
      Teach flatten_reloptions() to quote option values safely. · 69cfe15b
      Tom Lane authored
      flatten_reloptions() supposed that it didn't really need to do anything
      beyond inserting commas between reloption array elements.  However, in
      principle the value of a reloption could be nearly anything, since the
      grammar allows a quoted string there.  Any restrictions on it would come
      from validity checking appropriate to the particular option, if any.
      
      A reloption value that isn't a simple identifier or number could thus lead
      to dump/reload failures due to syntax errors in CREATE statements issued
      by pg_dump.  We've gotten away with not worrying about this so far with
      the core-supported reloptions, but extensions might allow reloption values
      that cause trouble, as in bug #13840 from Kouhei Sutou.
      
      To fix, split the reloption array elements explicitly, and then convert
      any value that doesn't look like a safe identifier to a string literal.
      (The details of the quoting rule could be debated, but this way is safe
      and requires little code.)  While we're at it, also quote reloption names
      if they're not safe identifiers; that may not be a likely problem in the
      field, but we might as well try to be bulletproof here.
      
      It's been like this for a long time, so back-patch to all supported
      branches.
      
      Kouhei Sutou, adjusted some by me
      69cfe15b
Loading