1. 15 4月, 2010 1 次提交
    • T
      Fix a problem introduced by my patch of 2010-01-12 that revised the way · 32616fb1
      Tom Lane 提交于
      relcache reload works.  In the patched code, a relcache entry in process of
      being rebuilt doesn't get unhooked from the relcache hash table; which means
      that if a cache flush occurs due to sinval queue overrun while we're
      rebuilding it, the entry could get blown away by RelationCacheInvalidate,
      resulting in crash or misbehavior.  Fix by ensuring that an entry being
      rebuilt has positive refcount, so it won't be seen as a target for removal
      if a cache flush occurs.  (This will mean that the entry gets rebuilt twice
      in such a scenario, but that's okay.)  It appears that the problem can only
      arise within a transaction that has previously reassigned the relfilenode of
      a pre-existing table, via TRUNCATE or a similar operation.  Per bug #5412
      from Rusty Conover.
      
      Back-patch to 8.2, same as the patch that introduced the problem.
      I think that the failure can't actually occur in 8.2, since it lacks the
      rd_newRelfilenodeSubid optimization, but let's make it work like the later
      branches anyway.
      
      Patch by Heikki, slightly editorialized on by me.
      32616fb1
  2. 09 4月, 2010 2 次提交
  3. 08 4月, 2010 1 次提交
  4. 07 4月, 2010 1 次提交
  5. 04 4月, 2010 1 次提交
  6. 03 4月, 2010 1 次提交
  7. 02 4月, 2010 1 次提交
    • H
      Don't pass an invalid file handle to dup2(). That causes a crash on · 292934de
      Heikki Linnakangas 提交于
      Windows, thanks to a feature in CRT called Parameter Validation.
      
      Backpatch to 8.2, which is the oldest version supported on Windows. In
      8.2 and 8.3 also backpatch the earlier change to use DEVNULL instead of
      NULL_DEV #define for a /dev/null-like device. NULL_DEV was hard-coded to
      "/dev/null" regardless of platform, which didn't work on Windows, while
      DEVNULL works on all platforms. Restarting syslogger didn't work on
      Windows on versions 8.3 and below because of that.
      292934de
  8. 25 3月, 2010 2 次提交
  9. 20 3月, 2010 1 次提交
    • T
      Clear error_context_stack and debug_query_string at the beginning of proc_exit, · e1eb7c81
      Tom Lane 提交于
      so that we won't try to attach any context printouts to messages that get
      emitted while exiting.  Per report from Dennis Koegel, the context functions
      won't necessarily work after we've started shutting down the backend, and it
      seems possible that debug_query_string could be pointing at freed storage
      as well.  The context information doesn't seem particularly relevant to
      such messages anyway, so there's little lost by suppressing it.
      
      Back-patch to all supported branches.  I can only demonstrate a crash with
      log_disconnections messages back to 8.1, but the risk seems real in 8.0 and
      before anyway.
      e1eb7c81
  10. 18 3月, 2010 1 次提交
  11. 12 3月, 2010 1 次提交
  12. 10 3月, 2010 2 次提交
  13. 09 3月, 2010 2 次提交
  14. 08 3月, 2010 4 次提交
  15. 06 3月, 2010 1 次提交
    • T
      When reading pg_hba.conf and similar files, do not treat @file as an inclusion · 0c814238
      Tom Lane 提交于
      unless (1) the @ isn't quoted and (2) the filename isn't empty.  This guards
      against unexpectedly treating usernames or other strings in "flat files"
      as inclusion requests, as seen in a recent trouble report from Ed L.
      The empty-filename case would be guaranteed to misbehave anyway, because our
      subsequent path-munging behavior results in trying to read the directory
      containing the current input file.
      
      I think this might finally explain the report at
      http://archives.postgresql.org/pgsql-bugs/2004-05/msg00132.php
      of a crash after printing "authentication file token too long, skipping",
      since I was able to duplicate that message (though not a crash) on a
      platform where stdio doesn't refuse to read directories.  We never got
      far in investigating that problem, but now I'm suspicious that the trigger
      condition was an @ in the flat password file.
      
      Back-patch to all active branches since the problem can be demonstrated in all
      branches except HEAD.  The test case, creating a user named "@", doesn't cause
      a problem in HEAD since we got rid of the flat password file.  Nonetheless it
      seems like a good idea to not consider quoted @ as a file inclusion spec,
      so I changed HEAD too.
      0c814238
  16. 04 3月, 2010 3 次提交
    • T
      Fix a couple of places that would loop forever if attempts to read a stdio file · 6fe45c96
      Tom Lane 提交于
      set ferror() but never set feof().  This is known to be the case for recent
      glibc when trying to read a directory as a file, and might be true for other
      platforms/cases too.  Per report from Ed L.  (There is more that we ought to
      do about his report, but this is one easily identifiable issue.)
      6fe45c96
    • T
      Make contrib/xml2 use core xml.c's error handler, when available (that is, · e2524c51
      Tom Lane 提交于
      in versions >= 8.3).  The core code is more robust and efficient than what
      was there before, and this also reduces risks involved in swapping different
      libxml error handler settings.
      
      Before 8.3, there is still some risk of problems if add-on modules such as
      Perl invoke libxml without setting their own error handler.  Given the lack
      of reports I'm not sure there's a risk in practice, so I didn't take the
      step of actually duplicating the core code into older contrib/xml2 branches.
      Instead I just tweaked the existing code to ensure it didn't leave a dangling
      pointer to short-lived memory when throwing an error.
      e2524c51
    • T
      Export xml.c's libxml-error-handling support so that contrib/xml2 can use it · f821c16e
      Tom Lane 提交于
      too, instead of duplicating the functionality (badly).
      
      I renamed xml_init to pg_xml_init, because the former seemed just a bit too
      generic to be safe as a global symbol.  I considered likewise renaming
      xml_ereport to pg_xml_ereport, but felt that the reference to ereport probably
      made it sufficiently PG-centric already.
      f821c16e
  17. 03 3月, 2010 4 次提交
  18. 02 3月, 2010 3 次提交
  19. 01 3月, 2010 3 次提交
    • T
      Remove xmlCleanupParser calls from contrib/xml2. · d71936c9
      Tom Lane 提交于
      These are unnecessary and probably dangerous.  I don't see any immediate
      risk situations in the core XML support or contrib/xml2 itself, but there
      could be issues with external uses of libxml2, and in any case it's an
      accident waiting to happen.
      d71936c9
    • T
      Back-patch today's memory management fixups in contrib/xml2. · 4f146ab3
      Tom Lane 提交于
      Prior to 8.3, these changes are not critical for compatibility with core
      Postgres, since core had no libxml2 calls then.  However there is still
      a risk if contrib/xml2 is used along with libxml2 functionality in Perl
      or other loadable modules.  So back-patch to all versions.
      
      Also back-patch addition of regression tests.  I'm not sure how many of
      the cases are interesting without the interaction with core xml code,
      but a silly regression test is still better than none at all.
      4f146ab3
    • T
      Back-patch changes of 2009-05-13 in xml.c's memory management. · a8cf68f7
      Tom Lane 提交于
      I was afraid to do this when these changes were first made, but now that
      8.4 has seen some field use it should be all right to back-patch.  These
      changes are really quite necessary in order to give xml.c any hope of
      co-existing with loadable modules that also wish to use libxml2.
      a8cf68f7
  20. 26 2月, 2010 1 次提交
    • T
      Allow predicate_refuted_by() to deduce that NOT A refutes A. · bf7edd6b
      Tom Lane 提交于
      We had originally made the stronger assumption that NOT A refutes any B
      if B implies A, but this fails in three-valued logic, because we need to
      prove B is false not just that it's not true.  However the logic does
      go through if B is equal to A.
      
      Recognizing this limited case is enough to handle examples that arise when
      we have simplified "bool_var = true" or "bool_var = false" to just "bool_var"
      or "NOT bool_var".  If we had not done that simplification then the
      btree-operator proof logic would have been able to prove that the expressions
      were contradictory, but only for identical expressions being compared to the
      constants; so handling identical A and B covers all the same cases.
      
      The motivation for doing this is to avoid unexpected asymmetrical behavior
      when a partitioned table uses a boolean partitioning column, as in today's
      gripe from Dominik Sander.
      
      Back-patch to 8.2, which is as far back as predicate_refuted_by attempts to
      do anything at all with NOTs.
      bf7edd6b
  21. 25 2月, 2010 2 次提交
    • M
      Add configuration parameter ssl_renegotiation_limit to control · 0a1ec273
      Magnus Hagander 提交于
      how often we do SSL session key renegotiation. Can be set to
      0 to disable renegotiation completely, which is required if
      a broken SSL library is used (broken patches to CVE-2009-3555
      a known cause) or when using a client library that can't do
      renegotiation.
      0a1ec273
    • T
      Allow zero-dimensional (ie, empty) arrays in contrib/ltree operations. · fbdf9712
      Tom Lane 提交于
      The main motivation for changing this is bug #4921, in which it's pointed out
      that it's no longer safe to apply ltree operations to the result of
      ARRAY(SELECT ...) if the sub-select might return no rows.  Before 8.3,
      the ARRAY() construct would return NULL, which might or might not be helpful
      but at least it wouldn't result in an error.  Now it returns an empty array
      which results in a failure for no good reason, since the ltree operations
      are all perfectly capable of dealing with zero-element arrays.
      
      As far as I can find, these ltree functions are the only places where zero
      array dimensionality is rejected unnecessarily.
      
      Back-patch to 8.3 to prevent behavioral regression of queries that worked
      in older releases.
      fbdf9712
  22. 19 2月, 2010 2 次提交