Skip to content
Snippets Groups Projects
  1. Aug 21, 2012
    • Tom Lane's avatar
      Fix dumping of security_barrier views with circular dependencies. · 1ace7868
      Tom Lane authored
      If a view has circular dependencies, pg_dump splits it into a CREATE TABLE
      and a CREATE RULE command to break the dependency loop.  However, if the
      view has reloptions, those options cannot be applied in the CREATE TABLE
      command, because views and tables have different allowed reloptions so
      CREATE TABLE would reject them.  Instead apply the reloptions after the
      CREATE RULE, using ALTER VIEW SET.
      1ace7868
  2. Aug 20, 2012
  3. Aug 17, 2012
    • Tom Lane's avatar
      Check LIBXML_VERSION instead of testing in configure script. · 33f40976
      Tom Lane authored
      We had put a test for libxml2's xmlStructuredErrorContext variable in
      configure, but of course that doesn't work on Windows builds.  The next
      best alternative seems to be to test the LIBXML_VERSION symbol provided
      by xmlversion.h.
      
      Per report from Talha Bin Rizwan, though this fixes it in a different way
      than his proposed patch.
      33f40976
  4. Aug 16, 2012
    • Tom Lane's avatar
      Allow create_index_paths() to consider multiple join bitmapscan paths. · 26893906
      Tom Lane authored
      In the initial cut at the "parameterized paths" feature, I'd simplified
      create_index_paths() to the point where it would only generate a single
      parameterized bitmap path per relation.  Experimentation with an example
      supplied by Josh Berkus convinces me that that's not good enough: we really
      need to consider a bitmap path for each possible outer relation.  Otherwise
      we have regressions relative to pre-9.2 versions, in which the planner
      picks a plain indexscan where it should have used a bitmap scan in queries
      involving three or more tables.  Indeed, after fixing this, several queries
      in the regression tests show improved plans as a result of using bitmap not
      plain indexscans.
      26893906
    • Heikki Linnakangas's avatar
      Fix GiST buffering build bug, which caused "failed to re-find parent" errors. · d6524697
      Heikki Linnakangas authored
      We use a hash table to track the parents of inner pages, but when inserting
      to a leaf page, the caller of gistbufferinginserttuples() must pass a
      correct block number of the leaf's parent page. Before gistProcessItup()
      descends to a child page, it checks if the downlink needs to be adjusted to
      accommodate the new tuple, and updates the downlink if necessary. However,
      updating the downlink might require splitting the page, which might move the
      downlink to a page to the right. gistProcessItup() doesn't realize that, so
      when it descends to the leaf page, it might pass an out-of-date parent block
      number as a result. Fix that by returning the block a tuple was inserted to
      from gistbufferinginserttuples().
      
      This fixes the bug reported by Zdeněk Jílovec.
      d6524697
    • Tom Lane's avatar
      Fix rescan logic in nodeCtescan. · caf97eb7
      Tom Lane authored
      The previous coding essentially assumed that nodes would be rescanned in
      the same order they were initialized in; or at least that the "leader" of
      a group of CTEscans would be rescanned before any others were required to
      execute.  Unfortunately, that isn't even a little bit true.  It's possible
      to devise queries in which the leader isn't rescanned until other CTEscans
      on the same CTE have run to completion, or even in which the leader never
      gets a rescan call at all.
      
      The fix makes the leader specially responsible only for initial creation
      and final destruction of the tuplestore; rescan resets are now a
      symmetrically shared responsibility.  This means that we might reset the
      tuplestore multiple times when restarting a plan subtree containing
      multiple CTEscans; but resetting an already-empty tuplestore is cheap
      enough that that doesn't seem like a problem.
      
      Per report from Adam Mackler; the new regression test cases are based on
      his example query.
      
      Back-patch to 8.4 where CTE scans were introduced.
      caf97eb7
  5. Aug 15, 2012
    • Tom Lane's avatar
      Disallow extensions from owning the schema they are assigned to. · 82634a88
      Tom Lane authored
      This situation creates a dependency loop that confuses pg_dump and probably
      other things.  Moreover, since the mental model is that the extension
      "contains" schemas it owns, but "is contained in" its extschema (even
      though neither is strictly true), having both true at once is confusing for
      people too.  So prevent the situation from being set up.
      
      Reported and patched by Thom Brown.  Back-patch to 9.1 where extensions
      were added.
      82634a88
    • Tom Lane's avatar
      Resurrect the "last ditch" code path in join_search_one_level(). · 43ccd309
      Tom Lane authored
      This essentially reverts commit e54b10a6,
      in which I'd decided that the "last ditch" join logic was useless.  The
      folly of that is now exposed by a report from Pavel Stehule: although the
      function should always find at least one join in a self-contained join
      problem, it can still fail to do so in a sub-problem created by artificial
      from_collapse_limit or join_collapse_limit constraints.  Adjust the
      comments to describe this, and simplify the code a bit to match the new
      coding of the earlier loop in the function.
      
      I'm not terribly happy about this: I still subscribe to the opinion stated
      in the previous commit message that the "last ditch" code can obscure logic
      bugs elsewhere.  But the alternative seems to be to complicate the earlier
      tests for does-this-relation-have-a-join-clause to the point where they can
      tell whether the join clauses link outside the current join sub-problem.
      And that looks messy, slow, and possibly a source of bugs in itself.
      In any case, now is not the time to be inserting experimental code into
      9.2, so let's just go back to the time-tested solution.
      43ccd309
    • Tom Lane's avatar
    • Tom Lane's avatar
      333a54a5
    • Tom Lane's avatar
      Prevent access to external files/URLs via contrib/xml2's xslt_process(). · 2ec75967
      Tom Lane authored
      libxslt offers the ability to read and write both files and URLs through
      stylesheet commands, thus allowing unprivileged database users to both read
      and write data with the privileges of the database server.  Disable that
      through proper use of libxslt's security options.
      
      Also, remove xslt_process()'s ability to fetch documents and stylesheets
      from external files/URLs.  While this was a documented "feature", it was
      long regarded as a terrible idea.  The fix for CVE-2012-3489 broke that
      capability, and rather than expend effort on trying to fix it, we're just
      going to summarily remove it.
      
      While the ability to write as well as read makes this security hole
      considerably worse than CVE-2012-3489, the problem is mitigated by the fact
      that xslt_process() is not available unless contrib/xml2 is installed,
      and the longstanding warnings about security risks from that should have
      discouraged prudent DBAs from installing it in security-exposed databases.
      
      Reported and fixed by Peter Eisentraut.
      
      Security: CVE-2012-3488
      2ec75967
    • Tom Lane's avatar
      Prevent access to external files/URLs via XML entity references. · aa2bc1f2
      Tom Lane authored
      xml_parse() would attempt to fetch external files or URLs as needed to
      resolve DTD and entity references in an XML value, thus allowing
      unprivileged database users to attempt to fetch data with the privileges
      of the database server.  While the external data wouldn't get returned
      directly to the user, portions of it could be exposed in error messages
      if the data didn't parse as valid XML; and in any case the mere ability
      to check existence of a file might be useful to an attacker.
      
      The ideal solution to this would still allow fetching of references that
      are listed in the host system's XML catalogs, so that documents can be
      validated according to installed DTDs.  However, doing that with the
      available libxml2 APIs appears complex and error-prone, so we're not going
      to risk it in a security patch that necessarily hasn't gotten wide review.
      So this patch merely shuts off all access, causing any external fetch to
      silently expand to an empty string.  A future patch may improve this.
      
      In HEAD and 9.2, also suppress warnings about undefined entities, which
      would otherwise occur as a result of not loading referenced DTDs.  Previous
      branches don't show such warnings anyway, due to different error handling
      arrangements.
      
      Credit to Noah Misch for first reporting the problem, and for much work
      towards a solution, though this simplistic approach was not his preference.
      Also thanks to Daniel Veillard for consultation.
      
      Security: CVE-2012-3489
      aa2bc1f2
  6. Aug 14, 2012
  7. Aug 11, 2012
    • Tom Lane's avatar
      Add link from COPY ref page to psql \copy. · ce36ecda
      Tom Lane authored
      Jeff Janes
      ce36ecda
    • Tom Lane's avatar
      Fix dependencies generated during ALTER TABLE ADD CONSTRAINT USING INDEX. · ca07d7eb
      Tom Lane authored
      This command generated new pg_depend entries linking the index to the
      constraint and the constraint to the table, which match the entries made
      when a unique or primary key constraint is built de novo.  However, it did
      not bother to get rid of the entries linking the index directly to the
      table.  We had considered the issue when the ADD CONSTRAINT USING INDEX
      patch was written, and concluded that we didn't need to get rid of the
      extra entries.  But this is wrong: ALTER COLUMN TYPE wasn't expecting such
      redundant dependencies to exist, as reported by Hubert Depesz Lubaczewski.
      On reflection it seems rather likely to break other things as well, since
      there are many bits of code that crawl pg_depend for one purpose or
      another, and most of them are pretty naive about what relationships they're
      expecting to find.  Fortunately it's not that hard to get rid of the extra
      dependency entries, so let's do that.
      
      Back-patch to 9.1, where ALTER TABLE ADD CONSTRAINT USING INDEX was added.
      ca07d7eb
  8. Aug 10, 2012
  9. Aug 09, 2012
  10. Aug 08, 2012
    • Alvaro Herrera's avatar
      Fix typo in comment · 7c055d64
      Alvaro Herrera authored
      7c055d64
    • Simon Riggs's avatar
      Doc correction to point out that 9.2+ can overwrite pg_xlog files. · cc23119a
      Simon Riggs authored
      Noted by Noah Misch, patch by Fujii Masao
      cc23119a
    • Simon Riggs's avatar
      Fix minor bug in XLogFileRead() that accidentally worked. · df09dbbc
      Simon Riggs authored
      Cascading replication copied the incoming file into pg_xlog but
      didn't set path correctly, so the first attempt to open file failed
      causing it to loop around and look for file in pg_xlog. So the
      earlier coding worked, but accidentally rather than by design.
      
      Spotted by Fujii Masao, fix by Fujii Masao and Simon Riggs
      df09dbbc
    • Tom Lane's avatar
      Update isolation tests' README file. · 4bf70f22
      Tom Lane authored
      The directions explaining about running the prepared-transactions test
      were not updated in commit ae55d9fb.
      4bf70f22
    • Tom Lane's avatar
      Fix TwoPhaseGetDummyBackendId(). · 5cf2307c
      Tom Lane authored
      This was broken in commit ed0b409d,
      which revised the GlobalTransactionData struct to not include the
      associated PGPROC as its first member, but overlooked one place where
      a cast was used in reliance on that equivalence.
      
      The most effective way of fixing this seems to be to create a new function
      that looks up the GlobalTransactionData struct given the XID, and make
      both TwoPhaseGetDummyBackendId and TwoPhaseGetDummyProc rely on that.
      
      Per report from Robert Ross.
      5cf2307c
  11. Aug 07, 2012
  12. Aug 06, 2012
    • Robert Haas's avatar
      Typo fixes for previous commit. · 73a7a646
      Robert Haas authored
      Noted by Thom Brown.
      73a7a646
    • Robert Haas's avatar
      Warn more vigorously about the non-transactional behavior of sequences. · e022ed91
      Robert Haas authored
      Craig Ringer, edited fairly heavily by me
      e022ed91
    • Alvaro Herrera's avatar
      Make strings identical · da003a5a
      Alvaro Herrera authored
      da003a5a
    • Magnus Hagander's avatar
      Complain with proper error message if streaming stops prematurely · 0b4660b5
      Magnus Hagander authored
      In particular, with a controlled shutdown of the master, pg_basebackup
      with streaming log could terminate without an error message, even though
      the backup is not consistent.
      
      In passing, fix a few cases where walfile wasn't properly set to -1 after
      closing.
      
      Fujii Masao
      0b4660b5
    • Heikki Linnakangas's avatar
      Perform conversion from Python unicode to string/bytes object via UTF-8. · d9c77e24
      Heikki Linnakangas authored
      We used to convert the unicode object directly to a string in the server
      encoding by calling Python's PyUnicode_AsEncodedString function. In other
      words, we used Python's routines to do the encoding. However, that has a
      few problems. First of all, it required keeping a mapping table of Python
      encoding names and PostgreSQL encodings. But the real killer was that Python
      doesn't support EUC_TW and MULE_INTERNAL encodings at all.
      
      Instead, convert the Python unicode object to UTF-8, and use PostgreSQL's
      encoding conversion functions to convert from UTF-8 to server encoding. We
      were already doing the same in the other direction in PLyUnicode_FromString,
      so this is more consistent, too.
      
      Note: This makes SQL_ASCII to behave more leniently. We used to map
      SQL_ASCII to Python's 'ascii', which on Python means strict 7-bit ASCII
      only, so you got an error if the python string contained anything but pure
      ASCII. You no longer get an error; you get the UTF-8 representation of the
      string instead.
      
      Backpatch to 9.0, where these conversions were introduced.
      
      Jan Urbański
      d9c77e24
  13. Aug 04, 2012
  14. Aug 03, 2012
    • Tom Lane's avatar
      Fix bugs with parsing signed hh:mm and hh:mm:ss fields in interval input. · 225fe68c
      Tom Lane authored
      DecodeInterval() failed to honor the "range" parameter (the special SQL
      syntax for indicating which fields appear in the literal string) if the
      time was signed.  This seems inappropriate, so make it work like the
      not-signed case.  The inconsistency was introduced in my commit
      f867339c, which as noted in its log message
      was only really focused on making SQL-compliant literals work per spec.
      Including a sign here is not per spec, but if we're going to allow it
      then it's reasonable to expect it to work like the not-signed case.
      
      Also, remove bogus setting of tmask, which caused subsequent processing to
      think that what had been given was a timezone and not an hh:mm(:ss) field,
      thus confusing checks for redundant fields.  This seems to be an aboriginal
      mistake in Lockhart's commit 2cf16424.
      
      Add regression test cases to illustrate the changed behaviors.
      
      Back-patch as far as 8.4, where support for spec-compliant interval
      literals was added.
      
      Range problem reported and diagnosed by Amit Kapila, tmask problem by me.
      225fe68c
    • Bruce Momjian's avatar
      Add link to synchronous_commit variables in high availability docs. · bf92fb6c
      Bruce Momjian authored
      Backpatch to 9.2
      
      Erik Rijkers
      bf92fb6c
    • Tom Lane's avatar
      Improve underdocumented btree_xlog_delete_get_latestRemovedXid() code. · 11de73b2
      Tom Lane authored
      As noted by Noah Misch, btree_xlog_delete_get_latestRemovedXid is
      critically dependent on the assumption that it's examining a consistent
      state of the database.  This was undocumented though, so the
      seemingly-unrelated check for no active HS sessions might be thought to be
      merely an optional optimization.  Improve comments, and add an explicit
      check of reachedConsistency just to be sure.
      
      This function returns InvalidTransactionId (thereby killing all HS
      transactions) in several cases that are not nearly unlikely enough for my
      taste.  This commit doesn't attempt to fix those deficiencies, just
      document them.
      
      Back-patch to 9.2, not from any real functional need but just to keep the
      branches more closely synced to simplify possible future back-patching.
      11de73b2
    • Tom Lane's avatar
      In SPGiST replay, do conflict resolution before modifying the page. · dd6947aa
      Tom Lane authored
      In yesterday's commit 962e0cc7, I added the
      ResolveRecoveryConflictWithSnapshot call in the wrong place.  I correctly
      put it before spgRedoVacuumRedirect itself would modify the index page ---
      but not before RestoreBkpBlocks, so replay of a record with a full-page
      image would modify the page before kicking off any conflicting HS
      transactions.  Oops.
      dd6947aa
Loading