Skip to content
Snippets Groups Projects
  1. May 08, 2017
    • Tom Lane's avatar
      Stamp 9.5.7. · aa3bcba0
      Tom Lane authored
    • Tom Lane's avatar
      Further patch rangetypes_selfuncs.c's statistics slot management. · 4509b4eb
      Tom Lane authored
      Values in a STATISTIC_KIND_RANGE_LENGTH_HISTOGRAM slot are float8,
      not of the type of the column the statistics are for.
      
      This bug is at least partly the fault of sloppy specification comments
      for get_attstatsslot()/free_attstatsslot(): the type OID they want is that
      of the stavalues entries, not of the underlying column.  (I double-checked
      other callers and they seem to get this right.)  Adjust the comments to be
      more correct.
      
      Per buildfarm.
      
      Security: CVE-2017-7484
      4509b4eb
    • Tom Lane's avatar
      Last-minute updates for release notes. · 7603952e
      Tom Lane authored
      Security: CVE-2017-7484, CVE-2017-7485, CVE-2017-7486
      7603952e
    • Tom Lane's avatar
      Fix possibly-uninitialized variable. · a199582e
      Tom Lane authored
      Oversight in e2d4ef8d et al (my fault not Peter's).  Per buildfarm.
      
      Security: CVE-2017-7484
      a199582e
    • Noah Misch's avatar
      Match pg_user_mappings limits to information_schema.user_mapping_options. · db215810
      Noah Misch authored
      Both views replace the umoptions field with NULL when the user does not
      meet qualifications to see it.  They used different qualifications, and
      pg_user_mappings documented qualifications did not match its implemented
      qualifications.  Make its documentation and implementation match those
      of user_mapping_options.  One might argue for stronger qualifications,
      but these have long, documented tenure.  pg_user_mappings has always
      exhibited this problem, so back-patch to 9.2 (all supported versions).
      
      Michael Paquier and Feike Steenbergen.  Reviewed by Jeff Janes.
      Reported by Andrew Wheelwright.
      
      Security: CVE-2017-7486
      db215810
    • Noah Misch's avatar
      Restore PGREQUIRESSL recognition in libpq. · 96d74549
      Noah Misch authored
      Commit 65c3bf19 moved handling of the,
      already then, deprecated requiressl parameter into conninfo_storeval().
      The default PGREQUIRESSL environment variable was however lost in the
      change resulting in a potentially silent accept of a non-SSL connection
      even when set.  Its documentation remained.  Restore its implementation.
      Also amend the documentation to mark PGREQUIRESSL as deprecated for
      those not following the link to requiressl.  Back-patch to 9.3, where
      commit 65c3bf19 first appeared.
      
      Behavior has been more complex when the user provides both deprecated
      and non-deprecated settings.  Before commit 65c3bf19, libpq operated
      according to the first of these found:
      
        requiressl=1
        PGREQUIRESSL=1
        sslmode=*
        PGSSLMODE=*
      
      (Note requiressl=0 didn't override sslmode=*; it would only suppress
      PGREQUIRESSL=1 or a previous requiressl=1.  PGREQUIRESSL=0 had no effect
      whatsoever.)  Starting with commit 65c3bf19, libpq ignored PGREQUIRESSL,
      and order of precedence changed to this:
      
        last of requiressl=* or sslmode=*
        PGSSLMODE=*
      
      Starting now, adopt the following order of precedence:
      
        last of requiressl=* or sslmode=*
        PGSSLMODE=*
        PGREQUIRESSL=1
      
      This retains the 65c3bf19 behavior for connection strings that contain
      both requiressl=* and sslmode=*.  It retains the 65c3bf19 change that
      either connection string option overrides both environment variables.
      For the first time, PGSSLMODE has precedence over PGREQUIRESSL; this
      avoids reducing security of "PGREQUIRESSL=1 PGSSLMODE=verify-full"
      configurations originating under v9.3 and later.
      
      Daniel Gustafsson
      
      Security: CVE-2017-7485
      96d74549
    • Peter Eisentraut's avatar
      Translation updates · 769294f3
      Peter Eisentraut authored
      Source-Git-URL: git://git.postgresql.org/git/pgtranslation/messages.git
      Source-Git-Hash: 14c4b5cb0f9330a9397159979c48e7076fa856d8
      769294f3
    • Peter Eisentraut's avatar
      Add security checks to selectivity estimation functions · d45cd7c0
      Peter Eisentraut authored
      
      Some selectivity estimation functions run user-supplied operators over
      data obtained from pg_statistic without security checks, which allows
      those operators to leak pg_statistic data without having privileges on
      the underlying tables.  Fix by checking that one of the following is
      satisfied: (1) the user has table or column privileges on the table
      underlying the pg_statistic data, or (2) the function implementing the
      user-supplied operator is leak-proof.  If neither is satisfied, planning
      will proceed as if there are no statistics available.
      
      At least one of these is satisfied in most cases in practice.  The only
      situations that are negatively impacted are user-defined or
      not-leak-proof operators on a security-barrier view.
      
      Reported-by: default avatarRobert Haas <robertmhaas@gmail.com>
      Author: Peter Eisentraut <peter_e@gmx.net>
      Author: Tom Lane <tgl@sss.pgh.pa.us>
      
      Security: CVE-2017-7484
      d45cd7c0
  2. May 07, 2017
    • Tom Lane's avatar
      04b41836
    • Tom Lane's avatar
      Guard against null t->tm_zone in strftime.c. · 74e747fb
      Tom Lane authored
      The upstream IANA code does not guard against null TM_ZONE pointers in this
      function, but in our code there is such a check in the other pre-existing
      use of t->tm_zone.  We do have some places that set pg_tm.tm_zone to NULL.
      I'm not entirely sure it's possible to reach strftime with such a value,
      but I'm not sure it isn't either, so be safe.
      
      Per Coverity complaint.
      74e747fb
    • Tom Lane's avatar
      Install the "posixrules" timezone link in MSVC builds. · 2f66002d
      Tom Lane authored
      Somehow, we'd missed ever doing this.  The consequences aren't too
      severe: basically, the timezone library would fall back on its hardwired
      notion of the DST transition dates to use for a POSIX-style zone name,
      rather than obeying US/Eastern which is the intended behavior.  The net
      effect would only be to obey current US DST law further back than it
      ought to apply; so it's not real surprising that nobody noticed.
      
      David Rowley, per report from Amit Kapila
      
      Discussion: https://postgr.es/m/CAA4eK1LC7CaNhRAQ__C3ht1JVrPzaAXXhEJRnR5L6bfYHiLmWw@mail.gmail.com
      2f66002d
    • Tom Lane's avatar
      Restore fullname[] contents before falling through in pg_open_tzfile(). · 38ed45c9
      Tom Lane authored
      Fix oversight in commit af2c5aa8: if the shortcut open() doesn't work,
      we need to reset fullname[] to be just the name of the toplevel tzdata
      directory before we fall through into the pre-existing code.  This failed
      to be exposed in my (tgl's) testing because the fall-through path is
      actually never taken under normal circumstances.
      
      David Rowley, per report from Amit Kapila
      
      Discussion: https://postgr.es/m/CAA4eK1LC7CaNhRAQ__C3ht1JVrPzaAXXhEJRnR5L6bfYHiLmWw@mail.gmail.com
      38ed45c9
    • Robert Haas's avatar
      Allow queries submitted by postgres_fdw to be canceled. · cdf5a004
      Robert Haas authored
      Back-patch of commits f039eaac and
      1b812afb, which arranged (in 9.6+) to
      make remote queries interruptible.  It was known at the time that the
      same problem existed in the back-branches, but I did not back-patch
      for lack of a user complaint.
      
      Michael Paquier and Etsuro Fujita, adjusted for older branches by me.
      Per gripe from Suraj Kharage.  This doesn't directly addresss Suraj's
      gripe, but since the patch that will do so builds up on top of this
      work, it seems best to back-patch this part first.
      
      Discussion: http://postgr.es/m/CAF1DzPU8Kx+fMXEbFoP289xtm3bz3t+ZfxhmKavr98Bh-C0TqQ@mail.gmail.com
      cdf5a004
    • Stephen Frost's avatar
      RLS: Fix ALL vs. SELECT+UPDATE policy usage · d617c762
      Stephen Frost authored
      When we add the SELECT-privilege based policies to the RLS with check
      options (such as for an UPDATE statement, or when we have INSERT ...
      RETURNING), we need to be sure and use the 'USING' case if the policy is
      actually an 'ALL' policy (which could have both a USING clause and an
      independent WITH CHECK clause).
      
      This could result in policies acting differently when built using ALL
      (when the ALL had both USING and WITH CHECK clauses) and when building
      the policies independently as SELECT and UPDATE policies.
      
      Fix this by adding an explicit boolean to add_with_check_options() to
      indicate when the USING policy should be used, even if the policy has
      both USING and WITH CHECK policies on it.
      
      Reported by: Rod Taylor
      
      Back-patch to 9.5 where RLS was introduced.
      d617c762
  3. May 06, 2017
  4. May 05, 2017
  5. May 04, 2017
    • Tom Lane's avatar
      Fix pfree-of-already-freed-tuple when rescanning a GiST index-only scan. · 6cfb428b
      Tom Lane authored
      GiST's getNextNearest() function attempts to pfree the previously-returned
      tuple if any (that is, scan->xs_hitup in HEAD, or scan->xs_itup in older
      branches).  However, if we are rescanning a plan node after ending a
      previous scan early, those tuple pointers could be pointing to garbage,
      because they would be pointing into the scan's pageDataCxt or queueCxt
      which has been reset.  In a debug build this reliably results in a crash,
      although I think it might sometimes accidentally fail to fail in
      production builds.
      
      To fix, clear the pointer field anyplace we reset a context it might
      be pointing into.  This may be overkill --- I think probably only the
      queueCxt case is involved in this bug, so that resetting in gistrescan()
      would be sufficient --- but dangling pointers are generally bad news,
      so let's avoid them.
      
      Another plausible answer might be to just not bother with the pfree in
      getNextNearest().  The reconstructed tuples would go away anyway in the
      context resets, and I'm far from convinced that freeing them a bit earlier
      really saves anything meaningful.  I'll stick with the original logic in
      this patch, but if we find more problems in the same area we should
      consider that approach.
      
      Per bug #14641 from Denis Smirnov.  Back-patch to 9.5 where this
      logic was introduced.
      
      Discussion: https://postgr.es/m/20170504072034.24366.57688@wrigleys.postgresql.org
      6cfb428b
    • Tom Lane's avatar
      Remove useless and rather expensive stanza in matview regression test. · 2ffe80c0
      Tom Lane authored
      This removes a test case added by commit b69ec7cc, which was intended
      to exercise a corner case involving the rule used at that time that
      materialized views were unpopulated iff they had physical size zero.
      We got rid of that rule very shortly later, in commit 1d6c72a5, but
      kept the test case.  However, because the case now asks what VACUUM
      will do to a zero-sized physical file, it would be pretty surprising
      if the answer were ever anything but "nothing" ... and if things were
      indeed that broken, surely we'd find it out from other tests.  Since
      the test involves a table that's fairly large by regression-test
      standards (100K rows), it's quite slow to run.  Dropping it should
      save some buildfarm cycles, so let's do that.
      
      Discussion: https://postgr.es/m/32386.1493831320@sss.pgh.pa.us
      2ffe80c0
  6. May 03, 2017
    • Tom Lane's avatar
      Improve performance of timezone loading, especially pg_timezone_names view. · 724cd4f0
      Tom Lane authored
      tzparse() would attempt to load the "posixrules" timezone database file on
      each call.  That might seem like it would only be an issue when selecting a
      POSIX-style zone name rather than a zone defined in the timezone database,
      but it turns out that each zone definition file contains a POSIX-style zone
      string and tzload() will call tzparse() to parse that.  Thus, when scanning
      the whole timezone file tree as we do in the pg_timezone_names view,
      "posixrules" was read repetitively for each zone definition file.  Fix
      that by caching the file on first use within any given process.  (We cache
      other zone definitions for the life of the process, so there seems little
      reason not to cache this one as well.)  This probably won't help much in
      processes that never run pg_timezone_names, but even one additional SET
      of the timezone GUC would come out ahead.
      
      An even worse problem for pg_timezone_names is that pg_open_tzfile()
      has an inefficient way of identifying the canonical case of a zone name:
      it basically re-descends the directory tree to the zone file.  That's not
      awful for an individual "SET timezone" operation, but it's pretty horrid
      when we're inspecting every zone in the database.  And it's pointless too
      because we already know the canonical spelling, having just read it from
      the filesystem.  Fix by teaching pg_open_tzfile() to avoid the directory
      search if it's not asked for the canonical name, and backfilling the
      proper result in pg_tzenumerate_next().
      
      In combination these changes seem to make the pg_timezone_names view
      about 3x faster to read, for me.  Since a scan of pg_timezone_names
      has up to now been one of the slowest queries in the regression tests,
      this should help some little bit for buildfarm cycle times.
      
      Back-patch to all supported branches, not so much because it's likely
      that users will care much about the view's performance as because
      tracking changes in the upstream IANA timezone code is really painful
      if we don't keep all the branches in sync.
      
      Discussion: https://postgr.es/m/27962.1493671706@sss.pgh.pa.us
      724cd4f0
    • Tom Lane's avatar
      Ensure commands in extension scripts see the results of preceding DDL. · d0d3a57b
      Tom Lane authored
      Due to a missing CommandCounterIncrement() call, parsing of a non-utility
      command in an extension script would not see the effects of the immediately
      preceding DDL command, unless that command's execution ends with
      CommandCounterIncrement() internally ... which some do but many don't.
      Report by Philippe Beaudoin, diagnosis by Julien Rouhaud.
      
      Rather remarkably, this bug has evaded detection since extensions were
      invented, so back-patch to all supported branches.
      
      Discussion: https://postgr.es/m/2cf7941e-4e41-7714-3de8-37b1a8f74dff@free.fr
      d0d3a57b
  7. May 02, 2017
  8. May 01, 2017
    • Tom Lane's avatar
      Update time zone data files to tzdata release 2017b. · 9a8cc157
      Tom Lane authored
      DST law changes in Chile, Haiti, and Mongolia.  Historical corrections for
      Ecuador, Kazakhstan, Liberia, and Spain.
      
      The IANA crew continue their campaign to replace invented time zone
      abbrevations with numeric GMT offsets.  This update changes numerous zones
      in South America, the Pacific and Indian oceans, and some Asian and Middle
      Eastern zones.  I kept these abbreviations in the tznames/ data files,
      however, so that we will still accept them for input.  (We may want to
      start trimming those files someday, but I think we should wait for the
      upstream dust to settle before deciding what to do.)
      
      In passing, add MESZ (Mitteleuropaeische Sommerzeit) to the tznames lists;
      since we accept MEZ (Mitteleuropaeische Zeit) it seems rather strange not
      to take the other one.  And fix some incorrect, or at least obsolete,
      comments that certain abbreviations are not traceable to the IANA data.
      9a8cc157
    • Andrew Dunstan's avatar
      Allow vcregress.pl to run an arbitrary TAP test set · 263e33d9
      Andrew Dunstan authored
      Currently only provision for running the bin checks in a single step is
      provided for. Now these tests can be run individually, as well as tests
      in other locations (e.g. src.test/recover).
      
      Also provide for suppressing unnecessary temp installs by setting the
      NO_TEMP_INSTALL environment variable just as the Makefiles do.
      
      Backpatch to 9.4.
      263e33d9
  9. Apr 30, 2017
    • Tom Lane's avatar
      Sync our copy of the timezone library with IANA release tzcode2017b. · 4d4d8fa7
      Tom Lane authored
      zic no longer mishandles some transitions in January 2038 when it
      attempts to work around Qt bug 53071.  This fixes a bug affecting
      Pacific/Tongatapu that was introduced in zic 2016e.  localtime.c
      now contains a workaround, useful when loading a file generated by
      a buggy zic.
      
      There are assorted cosmetic changes as well, notably relocation
      of a bunch of #defines.
      4d4d8fa7
  10. Apr 28, 2017
    • Robert Haas's avatar
      Fix VALIDATE CONSTRAINT to consider NO INHERIT attribute. · a0291c33
      Robert Haas authored
      Currently, trying to validate a NO INHERIT constraint on the parent will
      search for the constraint in child tables (where it is not supposed to
      exist), wrongly causing a "constraint does not exist" error.
      
      Amit Langote, per a report from Hans Buschmann.
      
      Discussion: http://postgr.es/m/20170421184012.24362.19@wrigleys.postgresql.org
      a0291c33
    • Andres Freund's avatar
      Don't use on-disk snapshots for exported logical decoding snapshot. · 54270d7e
      Andres Freund authored
      Logical decoding stores historical snapshots on disk, so that logical
      decoding can restart without having to reconstruct a snapshot from
      scratch (for which the resources are not guaranteed to be present
      anymore).  These serialized snapshots were also used when creating a
      new slot via the walsender interface, which can export a "full"
      snapshot (i.e. one that can read all tables, not just catalog ones).
      
      The problem is that the serialized snapshots are only useful for
      catalogs and not for normal user tables.  Thus the use of such a
      serialized snapshot could result in an inconsistent snapshot being
      exported, which could lead to queries returning wrong data.  This
      would only happen if logical slots are created while another logical
      slot already exists.
      
      Author: Petr Jelinek
      Reviewed-By: Andres Freund
      Discussion: https://postgr.es/m/f37e975c-908f-858e-707f-058d3b1eb214@2ndquadrant.com
      Backport: 9.4, where logical decoding was introduced.
      54270d7e
  11. Apr 27, 2017
    • Andres Freund's avatar
      Preserve required !catalog tuples while computing initial decoding snapshot. · 47f896b5
      Andres Freund authored
      The logical decoding machinery already preserved all the required
      catalog tuples, which is sufficient in the course of normal logical
      decoding, but did not guarantee that non-catalog tuples were preserved
      during computation of the initial snapshot when creating a slot over
      the replication protocol.
      
      This could cause a corrupted initial snapshot being exported.  The
      time window for issues is usually not terribly large, but on a busy
      server it's perfectly possible to it hit it.  Ongoing decoding is not
      affected by this bug.
      
      To avoid increased overhead for the SQL API, only retain additional
      tuples when a logical slot is being created over the replication
      protocol.  To do so this commit changes the signature of
      CreateInitDecodingContext(), but it seems unlikely that it's being
      used in an extension, so that's probably ok.
      
      In a drive-by fix, fix handling of
      ReplicationSlotsComputeRequiredXmin's already_locked argument, which
      should only apply to ProcArrayLock, not ReplicationSlotControlLock.
      
      Reported-By: Erik Rijkers
      Analyzed-By: Petr Jelinek
      Author: Petr Jelinek, heavily editorialized by Andres Freund
      Reviewed-By: Andres Freund
      Discussion: https://postgr.es/m/9a897b86-46e1-9915-ee4c-da02e4ff6a95@2ndquadrant.com
      Backport: 9.4, where logical decoding was introduced.
      47f896b5
  12. Apr 24, 2017
    • Tom Lane's avatar
      Fix postmaster's handling of fork failure for a bgworker process. · dba1f310
      Tom Lane authored
      This corner case didn't behave nicely at all: the postmaster would
      (partially) update its state as though the process had started
      successfully, and be quite confused thereafter.  Fix it to act
      like the worker had crashed, instead.
      
      In passing, refactor so that do_start_bgworker contains all the
      state-change logic for bgworker launch, rather than just some of it.
      
      Back-patch as far as 9.4.  9.3 contains similar logic, but it's just
      enough different that I don't feel comfortable applying the patch
      without more study; and the use of bgworkers in 9.3 was so small
      that it doesn't seem worth the extra work.
      
      transam/parallel.c is still entirely unprepared for the possibility
      of bgworker startup failure, but that seems like material for a
      separate patch.
      
      Discussion: https://postgr.es/m/4905.1492813727@sss.pgh.pa.us
      dba1f310
    • Andrew Gierth's avatar
      Repair crash with unsortable data in grouping sets. · 7be3678a
      Andrew Gierth authored
      Previously the code would generate incorrect results, assertion
      failures, or crashes if given unsortable (but hashable) columns in
      grouping sets.  Handle by throwing an error instead.
      
      Report and patch by Pavan Deolasee (though I changed the error
      wording slightly); regression test by me.
      
      (This affects 9.5 only since the planner was refactored in 9.6.)
      7be3678a
    • Andres Freund's avatar
      Zero padding in replication origin's checkpointed on disk-state. · 81ff04de
      Andres Freund authored
      This seems to be largely cosmetic, avoiding valgrind bleats and the
      like. The uninitialized padding influences the CRC of the on-disk
      entry, but because it's also used when verifying the CRC, that doesn't
      cause spurious failures.  Backpatch nonetheless.
      
      It's a bit unfortunate that contrib/test_decoding/sql/replorigin.sql
      doesn't exercise the checkpoint path, but checkpoints are fairly
      expensive on weaker machines, and we'd have to stop/start for that to
      be meaningful.
      
      Author: Andres Freund
      Discussion: https://postgr.es/m/20170422183123.w2jgiuxtts7qrqaq@alap3.anarazel.de
      Backpatch: 9.5, where replication origins were introduced
      81ff04de
  13. Apr 23, 2017
    • Tom Lane's avatar
      Fix order of arguments to SubTransSetParent(). · a66e01bb
      Tom Lane authored
      ProcessTwoPhaseBuffer (formerly StandbyRecoverPreparedTransactions)
      mixed up the parent and child XIDs when calling SubTransSetParent to
      record the transactions' relationship in pg_subtrans.
      
      Remarkably, analysis by Simon Riggs suggests that this doesn't lead to
      visible problems (at least, not in non-Assert builds).  That might
      explain why we'd not noticed it before.  Nonetheless, it's surely wrong.
      
      This code was born broken, so back-patch to all supported branches.
      
      Discussion: https://postgr.es/m/20110.1492905318@sss.pgh.pa.us
      a66e01bb
  14. Apr 22, 2017
    • Peter Eisentraut's avatar
      doc: Update link · f91160c5
      Peter Eisentraut authored
      The reference "That is the topic of the next section." has been
      incorrect since the materialized views documentation got inserted
      between the section "rules-views" and "rules-update".
      
      Author: Zertrin <postgres_wiki@zertrin.org>
      f91160c5
  15. Apr 21, 2017
    • Tom Lane's avatar
      Avoid depending on non-POSIX behavior of fcntl(2). · 9f8be754
      Tom Lane authored
      The POSIX standard does not say that the success return value for
      fcntl(F_SETFD) and fcntl(F_SETFL) is zero; it says only that it's not -1.
      We had several calls that were making the stronger assumption.  Adjust
      them to test specifically for -1 for strict spec compliance.
      
      The standard further leaves open the possibility that the O_NONBLOCK
      flag bit is not the only active one in F_SETFL's argument.  Formally,
      therefore, one ought to get the current flags with F_GETFL and store
      them back with only the O_NONBLOCK bit changed when trying to change
      the nonblock state.  In port/noblock.c, we were doing the full pushup
      in pg_set_block but not in pg_set_noblock, which is just weird.  Make
      both of them do it properly, since they have little business making
      any assumptions about the socket they're handed.  The other places
      where we're issuing F_SETFL are working with FDs we just got from
      pipe(2), so it's reasonable to assume the FDs' properties are all
      default, so I didn't bother adding F_GETFL steps there.
      
      Also, while pg_set_block deserves some points for trying to do things
      right, somebody had decided that it'd be even better to cast fcntl's
      third argument to "long".  Which is completely loony, because POSIX
      clearly says the third argument for an F_SETFL call is "int".
      
      Given the lack of field complaints, these missteps apparently are not
      of significance on any common platforms.  But they're still wrong,
      so back-patch to all supported branches.
      
      Discussion: https://postgr.es/m/30882.1492800880@sss.pgh.pa.us
      9f8be754
  16. Apr 17, 2017
    • Tom Lane's avatar
      Always build a custom plan node's targetlist from the path's pathtarget. · 6f0f98bb
      Tom Lane authored
      We were applying the use_physical_tlist optimization to all relation
      scan plans, even those implemented by custom scan providers.  However,
      that's a bad idea for a couple of reasons.  The custom provider might
      be unable to provide columns that it hadn't expected to be asked for
      (for example, the custom scan might depend on an index-only scan).
      Even more to the point, there's no good reason to suppose that this
      "optimization" is a win for a custom scan; whatever the custom provider
      is doing is likely not based on simply returning physical heap tuples.
      (As a counterexample, if the custom scan is an interface to a column store,
      demanding all columns would be a huge loss.)  If it is a win, the custom
      provider could make that decision for itself and insert a suitable
      pathtarget into the path, anyway.
      
      Per discussion with Dmitry Ivanov.  Back-patch to 9.5 where custom scan
      support was introduced.  The argument that the custom provider can adjust
      the behavior by changing the pathtarget only applies to 9.6+, but on
      balance it seems more likely that use_physical_tlist will hurt custom
      scans than help them.
      
      Discussion: https://postgr.es/m/e29ddd30-8ef9-4da5-a50b-2bb7b8c7198d@postgrespro.ru
      6f0f98bb
    • Peter Eisentraut's avatar
      Fix compiler warning · b6e6ae1d
      Peter Eisentraut authored
      Introduced by 087e696f, happens with gcc
      4.7.2.
      b6e6ae1d
  17. Apr 15, 2017
    • Tom Lane's avatar
      Provide a way to control SysV shmem attach address in EXEC_BACKEND builds. · bbd4a1b6
      Tom Lane authored
      In standard non-Windows builds, there's no particular reason to care what
      address the kernel chooses to map the shared memory segment at.  However,
      when building with EXEC_BACKEND, there's a risk that the chosen address
      won't be available in all child processes.  Linux with ASLR enabled (which
      it is by default) seems particularly at risk because it puts shmem segments
      into the same area where it maps shared libraries.  We can work around
      that by specifying a mapping address that's outside the range where
      shared libraries could get mapped.  On x86_64 Linux, 0x7e0000000000
      seems to work well.
      
      This is only meant for testing/debugging purposes, so it doesn't seem
      necessary to go as far as providing a GUC (or any user-visible
      documentation, though we might change that later).  Instead, it's just
      controlled by setting an environment variable PG_SHMEM_ADDR to the
      desired attach address.
      
      Back-patch to all supported branches, since the point here is to
      remove intermittent buildfarm failures on EXEC_BACKEND animals.
      Owners of affected animals will need to add a suitable setting of
      PG_SHMEM_ADDR to their build_env configuration.
      
      Discussion: https://postgr.es/m/7036.1492231361@sss.pgh.pa.us
      bbd4a1b6
  18. Apr 14, 2017
    • Tom Lane's avatar
      Further fix pg_trgm's extraction of trigrams from regular expressions. · 9b48ce37
      Tom Lane authored
      Commit 9e43e871 turns out to have been insufficient: not only is it
      necessary to track tentative parent links while considering a set of
      arc removals, but it's necessary to track tentative flag additions
      as well.  This is because we always merge arc target states into
      arc source states; therefore, when considering a merge of the final
      state with some other, it is the other state that will acquire a new
      TSTATE_FIN bit.  If there's another arc for the same color trigram
      that would cause merging of that state with the initial state, we
      failed to recognize the problem.  The test cases for the prior commit
      evidently only exercised situations where a tentative merge with the
      initial state occurs before one with the final state.  If it goes the
      other way around, we'll happily merge the initial and final states,
      either producing a broken final graph that would never match anything,
      or triggering the Assert added by the prior commit.
      
      It's tempting to consider switching the merge direction when the merge
      involves the final state, but I lack the time to analyze that idea in
      detail.  Instead just keep track of the flag changes that would result
      from proposed merges, in the same way that the prior commit tracked
      proposed parent links.
      
      Along the way, add some more debugging support, because I'm not entirely
      confident that this is the last bug here.  And tweak matters so that
      the transformed.dot file uses small integers rather than pointer values
      to identify states; that makes it more readable if you're just eyeballing
      it rather than fooling with Graphviz.  And rename a couple of identically
      named struct fields to reduce confusion.
      
      Per report from Corey Csuhta.  Add a test case based on his example.
      (Note: this case does not trigger the bug under 9.3, apparently because
      its different measurement of costs causes it to stop merging states before
      it hits the failure.  I spent some time trying to find a variant that would
      fail in 9.3, without success; but I'm sure such cases exist.)
      
      Like the previous patch, back-patch to 9.3 where this code was added.
      
      Report: https://postgr.es/m/E2B01A4B-4530-406B-8D17-2F67CF9A16BA@csuhta.com
      9b48ce37
  19. Apr 13, 2017
    • Tom Lane's avatar
      Fix regexport.c to behave sanely with lookaround constraints. · 67665a71
      Tom Lane authored
      regexport.c thought it could just ignore LACON arcs, but the correct
      behavior is to treat them as satisfiable while consuming zero input
      (rather reminiscently of commit 9f1e642d).  Otherwise, the emitted
      simplified-NFA representation may contain no paths leading from initial
      to final state, which unsurprisingly confuses pg_trgm, as seen in
      bug #14623 from Jeff Janes.
      
      Since regexport's output representation has no concept of an arc that
      consumes zero input, recurse internally to find the next normal arc(s)
      after any LACON transitions.  We'd be forced into changing that
      representation if a LACON could be the last arc reaching the final
      state, but fortunately the regex library never builds NFAs with such
      a configuration, so there always is a next normal arc.
      
      Back-patch to 9.3 where this logic was introduced.
      
      Discussion: https://postgr.es/m/20170413180503.25948.94871@wrigleys.postgresql.org
      67665a71
Loading